From c71b3fe64e998bedd2e23bcaa1c200f8c3f43e8c Mon Sep 17 00:00:00 2001 From: Bulat Gazizov Date: Thu, 19 Feb 2026 22:34:05 +0300 Subject: [PATCH] lab04 --- pulumi/Pulumi.dev.yaml | 6 + pulumi/Pulumi.yaml | 7 + pulumi/go.mod | 91 ++++ pulumi/go.sum | 526 +++++++++++++++++++++++ pulumi/main.go | 101 +++++ terraform/.gitignore | 33 ++ terraform/.terraform.lock.hcl | 9 + terraform/docs/LAB04.md | 602 +++++++++++++++++++++++++++ terraform/docs/screenshots/image.png | Bin 0 -> 46999 bytes terraform/main.tf | 83 ++++ terraform/outputs.tf | 25 ++ terraform/variables.tf | 78 ++++ 12 files changed, 1561 insertions(+) create mode 100644 pulumi/Pulumi.dev.yaml create mode 100644 pulumi/Pulumi.yaml create mode 100644 pulumi/go.mod create mode 100644 pulumi/go.sum create mode 100644 pulumi/main.go create mode 100644 terraform/.gitignore create mode 100644 terraform/.terraform.lock.hcl create mode 100644 terraform/docs/LAB04.md create mode 100644 terraform/docs/screenshots/image.png create mode 100644 terraform/main.tf create mode 100644 terraform/outputs.tf create mode 100644 terraform/variables.tf diff --git a/pulumi/Pulumi.dev.yaml b/pulumi/Pulumi.dev.yaml new file mode 100644 index 0000000000..821a1a411c --- /dev/null +++ b/pulumi/Pulumi.dev.yaml @@ -0,0 +1,6 @@ +encryptionsalt: v1:e25uvu8WuZU=:v1:Z1vNvYkVpcv8+4kj:voDTdnD16uSOfigNNnpOiwBLD1sC9w== +config: + yacloud:cloud_id: b1gu280chocur11a7mfs + yacloud:folder_id: b1gvr40airke6dcfan9m + yacloud:my_ip: 80.71.232.39 + yandex:serviceAccountKeyFile: /home/bulatgazizov/terraform-sa-key.json diff --git a/pulumi/Pulumi.yaml b/pulumi/Pulumi.yaml new file mode 100644 index 0000000000..d0c37c4244 --- /dev/null +++ b/pulumi/Pulumi.yaml @@ -0,0 +1,7 @@ +name: yacloud +description: A minimal Go Pulumi program +runtime: go +config: + pulumi:tags: + value: + pulumi:template: go diff --git a/pulumi/go.mod b/pulumi/go.mod new file mode 100644 index 0000000000..d236a655db --- /dev/null +++ b/pulumi/go.mod @@ -0,0 +1,91 @@ +module yacloud + +go 1.25 + +require ( + github.com/pulumi/pulumi-yandex/sdk v0.13.0 + github.com/pulumi/pulumi/sdk/v3 v3.222.0 +) + +require ( + dario.cat/mergo v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/ProtonMail/go-crypto v1.1.6 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/atotto/clipboard v0.1.4 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/charmbracelet/bubbles v0.16.1 // indirect + github.com/charmbracelet/bubbletea v0.25.0 // indirect + github.com/charmbracelet/lipgloss v0.7.1 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/cloudflare/circl v1.6.1 // indirect + github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.6.2 // indirect + github.com/go-git/go-git/v5 v5.16.5 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.2.4 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/hcl/v2 v2.22.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.15.2 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pgavlin/fx v0.1.6 // indirect + github.com/pjbgf/sha1cd v0.3.2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect + github.com/pulumi/esc v0.17.0 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/skeema/knownhosts v1.3.1 // indirect + github.com/spf13/cast v1.4.1 // indirect + github.com/spf13/cobra v1.8.1 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/zclconf/go-cty v1.13.2 // indirect + go.uber.org/atomic v1.9.0 // indirect + golang.org/x/crypto v0.47.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/mod v0.31.0 // indirect + golang.org/x/net v0.49.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/term v0.39.0 // indirect + golang.org/x/text v0.33.0 // indirect + golang.org/x/tools v0.40.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect + google.golang.org/grpc v1.71.1 // indirect + google.golang.org/protobuf v1.36.6 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.4.2 // indirect +) diff --git a/pulumi/go.sum b/pulumi/go.sum new file mode 100644 index 0000000000..4151dc892c --- /dev/null +++ b/pulumi/go.sum @@ -0,0 +1,526 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= +github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +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/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +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/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY= +github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc= +github.com/charmbracelet/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM= +github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg= +github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= +github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= +github.com/cheggaaa/pb v1.0.18/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= +github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8= +github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= +github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= +github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= +github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= +github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= +github.com/go-git/go-git/v5 v5.16.5 h1:mdkuqblwr57kVfXri5TTH+nMFLNUxIj9Z7F5ykFbw5s= +github.com/go-git/go-git/v5 v5.16.5/go.mod h1:QOMLpNf1qxuSY4StA/ArOdfFR2TrKEjJiye2kel2m+M= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= +github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +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= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/hcl/v2 v2.22.0 h1:hkZ3nCtqeJsDhPRFz5EA9iwcG1hNWGePOTw6oyul12M= +github.com/hashicorp/hcl/v2 v2.22.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +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.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU= +github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M= +github.com/pgavlin/fx/v2 v2.0.3 h1:ZBVklTFjxcWvBVPE+ti5qwnmTIQ0Gq6nuj3J5RKDtKk= +github.com/pgavlin/fx/v2 v2.0.3/go.mod h1:Cvnwqq0BopdHUJ7CU50h1XPeKrF4ZwdFj1nJLXbAjCE= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +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/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= +github.com/pulumi/esc v0.17.0 h1:oaVOIyFTENlYDuqc3pW75lQT9jb2cd6ie/4/Twxn66w= +github.com/pulumi/esc v0.17.0/go.mod h1:XnSxlt5NkmuAj304l/gK4pRErFbtqq6XpfX1tYT9Jbc= +github.com/pulumi/pulumi-yandex/sdk v0.13.0 h1:mbVliVVCeboy6z8DBP4pAwef3emonA9OOV1qdy5hLzA= +github.com/pulumi/pulumi-yandex/sdk v0.13.0/go.mod h1:AMtNw3EQuTiPdxCgjbUmN0jFo4iXEdPdf5EdY1rP6YU= +github.com/pulumi/pulumi/sdk/v3 v3.23.2/go.mod h1:WHOQB00iuHZyXhwrymxpKXhpOahSguJIpRjVokmM11w= +github.com/pulumi/pulumi/sdk/v3 v3.222.0 h1:aHuJcnq3b339p0DhkMBN0EaQOSvojnwpbP1W1QWv8pI= +github.com/pulumi/pulumi/sdk/v3 v3.222.0/go.mod h1:UGWJOz25OiFIN0QH79UFij8mffH94TYebKUgy9Wvug0= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +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/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= +github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +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.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +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.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zclconf/go-cty v1.13.2 h1:4GvrUxe/QUDYuJKAav4EYqdM47/kZa672LwmXFmEKT0= +github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= +go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= +go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= +golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= +golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +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= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +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= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/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.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= +golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= +golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= +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= +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/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI= +google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +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= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +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= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= +lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/pulumi/main.go b/pulumi/main.go new file mode 100644 index 0000000000..448151db56 --- /dev/null +++ b/pulumi/main.go @@ -0,0 +1,101 @@ +package main + +import ( + "fmt" + "os" + + "github.com/pulumi/pulumi-yandex/sdk/go/yandex" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi/config" +) + +func main() { + pulumi.Run(func(ctx *pulumi.Context) error { + cfg := config.New(ctx, "") + + cloudID := cfg.Require("cloud_id") + folderID := cfg.Require("folder_id") + zone := cfg.Get("zone") + if zone == "" { + zone = "ru-central1-a" + } + myIP := cfg.Require("my_ip") + + network, err := yandex.NewVpcNetwork(ctx, "network", &yandex.VpcNetworkArgs{ + Name: pulumi.String("myapp-network"), + FolderId: pulumi.String(folderID), + }) + if err != nil { + return err + } + + subnet, err := yandex.NewVpcSubnet(ctx, "subnet", &yandex.VpcSubnetArgs{ + Name: pulumi.String("myapp-subnet"), + Zone: pulumi.String(zone), + NetworkId: network.ID(), + V4CidrBlocks: pulumi.StringArray{pulumi.String("192.168.10.0/24")}, + FolderId: pulumi.String(folderID), + }) + if err != nil { + return err + } + + sshKey, err := os.ReadFile("/home/bulatgazizov/.ssh/id_rsa.pub") + if err != nil { + return err + } + + userData := fmt.Sprintf(`#cloud-config +runcmd: + - iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + - iptables -A INPUT -i lo -j ACCEPT + - iptables -A INPUT -p tcp --dport 22 -s %s/32 -j ACCEPT + - iptables -A INPUT -p tcp --dport 80 -j ACCEPT + - iptables -A INPUT -p tcp --dport 5000 -j ACCEPT + - iptables -A INPUT -j DROP + - apt-get install -y iptables-persistent + - netfilter-persistent save +`, myIP) + + // VM + vm, err := yandex.NewComputeInstance(ctx, "vm", &yandex.ComputeInstanceArgs{ + Name: pulumi.String("myapp-vm"), + Zone: pulumi.String(zone), + FolderId: pulumi.String(folderID), + Resources: &yandex.ComputeInstanceResourcesArgs{ + Cores: pulumi.Int(2), + Memory: pulumi.Float64(1), + CoreFraction: pulumi.Int(5), + }, + BootDisk: &yandex.ComputeInstanceBootDiskArgs{ + InitializeParams: &yandex.ComputeInstanceBootDiskInitializeParamsArgs{ + ImageId: pulumi.String("fd84mnbiarffhtfrhnog"), + Size: pulumi.Int(20), + Type: pulumi.String("network-hdd"), + }, + }, + NetworkInterfaces: yandex.ComputeInstanceNetworkInterfaceArray{ + &yandex.ComputeInstanceNetworkInterfaceArgs{ + SubnetId: subnet.ID(), + Nat: pulumi.Bool(true), + }, + }, + Metadata: pulumi.StringMap{ + "ssh-keys": pulumi.String("ubuntu:" + string(sshKey)), + "user-data": pulumi.String(userData), + }, + }) + if err != nil { + return err + } + + ctx.Export("vm_id", vm.ID()) + ctx.Export("vm_public_ip", vm.NetworkInterfaces.Index(pulumi.Int(0)).NatIpAddress()) + ctx.Export("ssh_command", vm.NetworkInterfaces.Index(pulumi.Int(0)).NatIpAddress().ApplyT( + func(ip *string) string { return ("ssh ubuntu@" + *ip) }, + ).(pulumi.StringOutput)) + + _ = cloudID + return nil + }) +} diff --git a/terraform/.gitignore b/terraform/.gitignore new file mode 100644 index 0000000000..8d28dc4b65 --- /dev/null +++ b/terraform/.gitignore @@ -0,0 +1,33 @@ +# Local .terraform directories +**/.terraform/* + +# .tfstate files +*.tfstate +*.tfstate.* + +# Crash log files +crash.log +crash.*.log + +# Exclude all .tfvars files, which are likely to contain sensitive data +*.tfvars +*.tfvars.json + +# Ignore override files +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Ignore CLI configuration files +.terraformrc +terraform.rc + +# Ignore sensitive files +**/terraform.tfvars +**/terraform.tfvars.json + +# Ignore secret files +*.pem +*.key +*.priv diff --git a/terraform/.terraform.lock.hcl b/terraform/.terraform.lock.hcl new file mode 100644 index 0000000000..30a72a7d8a --- /dev/null +++ b/terraform/.terraform.lock.hcl @@ -0,0 +1,9 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/yandex-cloud/yandex" { + version = "0.187.0" + hashes = [ + "h1:wHAYDfBUlXMx1CmVwNWCr/SA7+CWO8aNC914WXUXNRQ=", + ] +} diff --git a/terraform/docs/LAB04.md b/terraform/docs/LAB04.md new file mode 100644 index 0000000000..a8d78634fc --- /dev/null +++ b/terraform/docs/LAB04.md @@ -0,0 +1,602 @@ +# LAB 04: Infrastructure as Code with Terraform (Yandex Cloud) + +## 1. Cloud Provider & Infrastructure + +### Cloud Provider Chosen and Rationale + +**Provider:** Yandex Cloud + +**Rationale for choosing Yandex Cloud:** + +- **Local Infrastructure:** Provides low latency and data residency within Russia +- **Payment Convenience:** Billing in Russian Rubles with support for local payment methods + +### Instance Type/Size and Why + +**Instance Type:** `standard-v1` with `core-fraction=5%` + +**Specifications:** + +- **vCPU:** 2 cores (Intel Xeon Platinum) +- **RAM:** 1 GB +- **Core Fraction:** 5% (guaranteed vCPU performance) + +**Why this configuration:** + +- **Cost Optimization:** The 5% core fraction significantly reduces costs while being sufficient for development and testing +- **Minimal Requirements:** 1 GB RAM is enough for a basic Ubuntu server with Python applications +- **Free Tier Compatibility:** This configuration stays within the free grant limits +- **Real-world Scenario:** Represents typical "burstable" instances like AWS t2.micro or GCP f1-micro + +**Region/Zone Selected:** `ru-central1-a` (Moscow region) + +**Current Cost:** **$0.00** (within free grant limits) + +### Resources Created + +| Resource Type | Name | Purpose | +|---------------|------|---------| +| **VPC Network** | `myapp-network` | Isolated cloud network for resources | +| **VPC Subnet** | `myapp-subnet` | Subnet in ru-central1-a with CIDR 192.168.10.0/24 | +| **Security Group** | `myapp-security-group` | Firewall rules for VM access control | +| **Compute Instance** | `myapp-vm` | Main virtual machine running Ubuntu 22.04 | +| **Public IP** | (Dynamic) | External access point for SSH and web services | + +### Network Configuration + +**Security Group Rules:** + +| Direction | Protocol | Port | Source/Destination | Purpose | +|-----------|----------|------|-------------------|---------| +| Ingress | TCP | 22 | My Public IP Only | Secure SSH access | +| Ingress | TCP | 80 | 0.0.0.0/0 | HTTP web traffic | +| Ingress | TCP | 5000 | 0.0.0.0/0 | Future application port | +| Egress | ALL | ALL | 0.0.0.0/0 | Outbound internet access | + +--- + +## 2. Terraform Implementation + +### Terraform Version Used + +```bash +Terraform v1.14.5 +on linux_amd64 ++ provider registry.terraform.io/yandex-cloud/yandex v0.187.0 +``` + +### Project structure + +```bash +terraform/ +├── main.tf # Primary configuration with all resources +├── variables.tf # Variable declarations +├── outputs.tf # Output definitions for important values +├── terraform.tfvars # Actual variable values (NOT in git) +``` + +- terraform init + +```bash +Initializing the backend... +Initializing provider plugins... +- Reusing previous version of yandex-cloud/yandex from the dependency lock file +- Using previously-installed yandex-cloud/yandex v0.187.0 + +Terraform has been successfully initialized! +``` + +- terraform plan + +```bash + +Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following +symbols: + + create + +Terraform will perform the following actions: + + # yandex_compute_instance.vm will be created + + resource "yandex_compute_instance" "vm" { + + created_at = (known after apply) + + folder_id = (known after apply) + + fqdn = (known after apply) + + gpu_cluster_id = (known after apply) + + hardware_generation = (known after apply) + + hostname = "myapp-vm" + + id = (known after apply) + + labels = { + + "environment" = "dev" + + "managed_by" = "terraform" + + "project" = "myapp" + } + + maintenance_grace_period = (known after apply) + + maintenance_policy = (known after apply) + + metadata = { + + "ssh-keys" = <<-EOT + ubuntu:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCllx+4eH/Jy9XVaY4Phk8g1w0NaXy4kw5iUs8TicP3wewIPBypwaGcLJPPuxPB7Mll9bRxGh8SCMJs3r/S50J1piQotd8XTW+1JeNUXPx3/ZIQtnM8872WnehCDm3qTplD5swFirx/h05bXyaW7hky2OKi4VT6AwtSap1b34TDIi9ryPZemUY1fv+MDkTX2ARw+awS9RARBI2WUXbuj3IdgGyUnaV4EZ/UOzK1/NmDzE/ADsMDk2AhS4ttyiLVVGVYuS0C/denPiTWvSzhFe8A6C1Jb3051MuH+VZEGRCG8j4tvcJqwYt+avVG7bFDZOSu+fcTkoj12E3T3EAVUAhT bulatgazizov@fedora + EOT + + "user-data" = (sensitive value) + } + + name = "myapp-vm" + + network_acceleration_type = "standard" + + platform_id = "standard-v1" + + status = (known after apply) + + zone = "ru-central1-a" + + + boot_disk { + + auto_delete = true + + device_name = (known after apply) + + disk_id = (known after apply) + + mode = (known after apply) + + + initialize_params { + + block_size = (known after apply) + + description = (known after apply) + + image_id = "fd84mnbiarffhtfrhnog" + + name = (known after apply) + + size = 20 + + snapshot_id = (known after apply) + + type = "network-hdd" + } + } + + + metadata_options (known after apply) + + + network_interface { + + index = (known after apply) + + ip_address = (known after apply) + + ipv4 = true + + ipv6 = (known after apply) + + ipv6_address = (known after apply) + + mac_address = (known after apply) + + nat = true + + nat_ip_address = (known after apply) + + nat_ip_version = (known after apply) + + subnet_id = (known after apply) + } + + + placement_policy (known after apply) + + + resources { + + core_fraction = 5 + + cores = 2 + + memory = 1 + } + + + scheduling_policy (known after apply) + } + + # yandex_vpc_network.network will be created + + resource "yandex_vpc_network" "network" { + + created_at = (known after apply) + + default_security_group_id = (known after apply) + + folder_id = (known after apply) + + id = (known after apply) + + labels = { + + "environment" = "dev" + + "managed_by" = "terraform" + + "project" = "myapp" + } + + name = "myapp-network" + + subnet_ids = (known after apply) + } + + # yandex_vpc_subnet.subnet will be created + + resource "yandex_vpc_subnet" "subnet" { + + created_at = (known after apply) + + folder_id = (known after apply) + + id = (known after apply) + + labels = { + + "environment" = "dev" + + "managed_by" = "terraform" + + "project" = "myapp" + } + + name = "myapp-subnet" + + network_id = (known after apply) + + v4_cidr_blocks = [ + + "192.168.10.0/24", + ] + + v6_cidr_blocks = (known after apply) + + zone = "ru-central1-a" + } + +Plan: 3 to add, 0 to change, 0 to destroy. + +Changes to Outputs: + + ssh_connection_command = (known after apply) + + vm_id = (known after apply) + + vm_name = "myapp-vm" + + vm_private_ip = (known after apply) + + vm_public_ip = (known after apply) + +``` + +- terraform apply + +```bash +Terraform will perform the following actions: + + # yandex_compute_instance.vm will be created + + resource "yandex_compute_instance" "vm" { + + created_at = (known after apply) + + folder_id = (known after apply) + + fqdn = (known after apply) + + gpu_cluster_id = (known after apply) + + hardware_generation = (known after apply) + + hostname = "myapp-vm" + + id = (known after apply) + + labels = { + + "environment" = "dev" + + "managed_by" = "terraform" + + "project" = "myapp" + } + + maintenance_grace_period = (known after apply) + + maintenance_policy = (known after apply) + + metadata = { + + "user-data" = (sensitive value) + } + + name = "myapp-vm" + + network_acceleration_type = "standard" + + platform_id = "standard-v1" + + status = (known after apply) + + zone = "ru-central1-a" + + + boot_disk { + + auto_delete = true + + device_name = (known after apply) + + disk_id = (known after apply) + + mode = (known after apply) + + + initialize_params { + + block_size = (known after apply) + + description = (known after apply) + + image_id = "fd84mnbiarffhtfrhnog" + + name = (known after apply) + + size = 20 + + snapshot_id = (known after apply) + + type = "network-hdd" + } + } + + + metadata_options (known after apply) + + + network_interface { + + index = (known after apply) + + ip_address = (known after apply) + + ipv4 = true + + ipv6 = (known after apply) + + ipv6_address = (known after apply) + + mac_address = (known after apply) + + nat = true + + nat_ip_address = (known after apply) + + nat_ip_version = (known after apply) + + subnet_id = (known after apply) + } + + + placement_policy (known after apply) + + + resources { + + core_fraction = 20 + + cores = 2 + + memory = 1 + } + + + scheduling_policy (known after apply) + } + + # yandex_vpc_network.network will be created + + resource "yandex_vpc_network" "network" { + + created_at = (known after apply) + + default_security_group_id = (known after apply) + + folder_id = (known after apply) + + id = (known after apply) + + labels = { + + "environment" = "dev" + + "managed_by" = "terraform" + + "project" = "myapp" + } + + name = "myapp-network" + + subnet_ids = (known after apply) + } + + # yandex_vpc_subnet.subnet will be created + + resource "yandex_vpc_subnet" "subnet" { + + created_at = (known after apply) + + folder_id = (known after apply) + + id = (known after apply) + + labels = { + + "environment" = "dev" + + "managed_by" = "terraform" + + "project" = "myapp" + } + + name = "myapp-subnet" + + network_id = (known after apply) + + v4_cidr_blocks = [ + + "192.168.10.0/24", + ] + + v6_cidr_blocks = (known after apply) + + zone = "ru-central1-a" + } + +Plan: 3 to add, 0 to change, 0 to destroy. + +Changes to Outputs: + + ssh_connection_command = (known after apply) + + vm_id = (known after apply) + + vm_name = "myapp-vm" + + vm_private_ip = (known after apply) + + vm_public_ip = (known after apply) + +Do you want to perform these actions? + Terraform will perform the actions described above. + Only 'yes' will be accepted to approve. + + Enter a value: yes + +yandex_vpc_network.network: Creating... +yandex_vpc_network.network: Creation complete after 2s [id=enpqgkei35jl65ftspug] +yandex_vpc_subnet.subnet: Creating... +yandex_vpc_subnet.subnet: Creation complete after 1s [id=e9btsik9pu3gg032gho0] +yandex_compute_instance.vm: Creating... +yandex_compute_instance.vm: Creation complete after 50s [id=fhmr8695gib7n8d65p7d] + +Apply complete! Resources: 3 added, 0 changed, 0 destroyed. + +Outputs: + +ssh_connection_command = "ssh ubuntu@62.84.124.236" +vm_id = "fhmr8695gib7n8d65p7d" +vm_name = "myapp-vm" +vm_private_ip = "192.168.10.5" +vm_public_ip = "62.84.124.236" +``` + +![alt text](screenshots/image.png) + +```bash +bulatgazizov@fedora:~$ ssh -J root@80.71.232.39 ubuntu@62.84.124.236 +root@80.71.232.39's password: +The authenticity of host '62.84.124.236 ()' can't be established. +ED25519 key fingerprint is SHA256:0w9t8/mHMIvCel0FqxRvDDaksZDHG0bRJIdY4bmDIFw. +This key is not known by any other names. +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes +To run a command as administrator (user "root"), use "sudo ". +See "man sudo_root" for details. + +ubuntu@myapp-vm:~$ +``` + +- terraform destroy + +```bash + +yandex_compute_instance.vm: Destroying... [id=fhmr8695gib7n8d65p7d] +yandex_compute_instance.vm: Destruction complete after 1m0s +yandex_vpc_subnet.subnet: Destroying... [id=e9btsik9pu3gg032gho0] +yandex_vpc_subnet.subnet: Destruction complete after 6s +yandex_vpc_network.network: Destroying... [id=enpqgkei35jl65ftspug] +yandex_vpc_network.network: Destruction complete after 2s +``` + +## 3. Pulumi Implementation + +**Pulumi Version**: v3.222.0 + +**Language**: Go 1.21+ with Pulumi Go SDK + +**Key Packages**: + +- github.com/pulumi/pulumi-yandex/sdk/go/yandex v0.2.0 (Yandex Cloud provider) + +- github.com/pulumi/pulumi/sdk/v3/go/pulumi v3.103.0 (Pulumi core) + +### How Code Differs from Terraform + +| Aspect | Terraform (HCL) | Pulumi (Go) | +|--------|-----------------|-------------| +| **Language** | Declarative DSL | Compiled Go code | +| **Type Safety** | Runtime checking | Compile-time checking | +| **Error Handling** | Stops on error | Go `error` handling | +| **Logic** | Limited (`count`, `for_each`) | Full Go (loops, functions, interfaces) | +| **Configuration** | `.tfvars` files | Type-safe config with `pulumi.Config` | +| **Outputs** | String interpolation | `ApplyT()` transformations | + +- pulumi preview + +```bash + +Enter your passphrase to unlock config/secrets + (set PULUMI_CONFIG_PASSPHRASE or PULUMI_CONFIG_PASSPHRASE_FILE to remember): +Enter your passphrase to unlock config/secrets +Previewing update (dev): + Type Name Plan + + pulumi:pulumi:Stack yacloud-dev create + + ├─ yandex:index:ComputeInstance vm create + + ├─ yandex:index:VpcNetwork network create + + └─ yandex:index:VpcSubnet subnet create + +Outputs: + ssh_command : [unknown] + vm_id : [unknown] + vm_public_ip: [unknown] + +Resources: + + 4 to create + +``` + +- palumi up + +```bash + + +Enter your passphrase to unlock config/secrets + (set PULUMI_CONFIG_PASSPHRASE or PULUMI_CONFIG_PASSPHRASE_FILE to remember): +Enter your passphrase to unlock config/secrets +Previewing update (dev): + Type Name Plan + + pulumi:pulumi:Stack yacloud-dev create + + ├─ yandex:index:VpcNetwork network create + + ├─ yandex:index:VpcSubnet subnet create + + └─ yandex:index:ComputeInstance vm create + +Outputs: + ssh_command : [unknown] + vm_id : [unknown] + vm_public_ip: [unknown] + +Resources: + + 4 to create + +Do you want to perform this update? yes +Updating (dev): + Type Name Status + + pulumi:pulumi:Stack yacloud-dev created (41s) + + ├─ yandex:index:VpcNetwork network created (2s) + + ├─ yandex:index:VpcSubnet subnet created (0.40s) + + └─ yandex:index:ComputeInstance vm created (38s) + +Outputs: + ssh_command : "ssh ubuntu@93.77.184.200" + vm_id : "fhm0u648ujj7incuqqk3" + vm_public_ip: "93.77.184.200" + +Resources: + + 4 created + +Duration: 45s + +``` + +- ssh: + +```bash + + ssh -J root@80.71.232.39 ubuntu@93.77.184.200 +root@80.71.232.39's password: +The authenticity of host '93.77.184.200 ()' can't be established. +ED25519 key fingerprint is SHA256:O2kZBUE35pHTPWMa5hP3q/3K3jgMGXF7hD34gxYmXRM. +This key is not known by any other names. +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes +Warning: Permanently added '93.77.184.200' (ED25519) to the list of known hosts. +Welcome to Ubuntu 24.04.3 LTS (GNU/Linux 6.8.0-85-generic x86_64) + + * Documentation: https://help.ubuntu.com + * Management: https://landscape.canonical.com + * Support: https://ubuntu.com/pro + + System information as of Thu Feb 19 18:23:33 UTC 2026 + + System load: 1.36 Processes: 155 + Usage of /: 11.1% of 18.72GB Users logged in: 0 + Memory usage: 23% IPv4 address for eth0: 192.168.10.23 + Swap usage: 0% + + +Expanded Security Maintenance for Applications is not enabled. + +0 updates can be applied immediately. + +Enable ESM Apps to receive additional future security updates. +See https://ubuntu.com/esm or run: sudo pro status + + +The list of available updates is more than a week old. +To check for new updates run: sudo apt update + + +The programs included with the Ubuntu system are free software; +the exact distribution terms for each program are described in the +individual files in /usr/share/doc/*/copyright. + +Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by +applicable law. + +To run a command as administrator (user "root"), use "sudo ". +See "man sudo_root" for details. + +ubuntu@fhm0u648ujj7incuqqk3:~$ +``` + +- pulumi destroy + +```bash + + +Previewing destroy (dev): + Type Name Plan + - pulumi:pulumi:Stack yacloud-dev delete + - ├─ yandex:index:VpcNetwork network delete + - ├─ yandex:index:ComputeInstance vm delete + - └─ yandex:index:VpcSubnet subnet delete + +Outputs: + - ssh_command : "ssh ubuntu@93.77.184.200" + - vm_id : "fhm0u648ujj7incuqqk3" + - vm_public_ip: "93.77.184.200" + +Resources: + - 4 to delete + +Do you want to perform this destroy? yes +Destroying (dev): + Type Name Status + - pulumi:pulumi:Stack yacloud-dev deleted (0.00s) + - ├─ yandex:index:ComputeInstance vm deleted (62s) + - ├─ yandex:index:VpcSubnet subnet deleted (5s) + - └─ yandex:index:VpcNetwork network deleted (0.45s) + +Outputs: + - ssh_command : "ssh ubuntu@93.77.184.200" + - vm_id : "fhm0u648ujj7incuqqk3" + - vm_public_ip: "93.77.184.200" + +Resources: + - 4 deleted + +Duration: 1m8s + +The resources in the stack have been deleted, but the history and configuration associated with the stack are still maintained. +If you want to remove the stack completely, run `pulumi stack rm dev`. + +``` + +## 4. Terraform vs Pulumi Comparison + +### Ease of Learning + +Terraform: Easier to pick up because it uses its own simple language (HCL) that just lists what you want to create. + +Pulumi: Harder to learn because you need to know a real programming language and understand special concepts like "Outputs" and "Apply." + +### Code Readability + +Terraform: Clean and straightforward - you can quickly see what resources will be created just by looking at the file. + +Pulumi: Can get messy with code, but is more organized if you're building complex things with functions and reusable parts. + +### Debugging + +Terraform: Gives clear error messages that tell you exactly which resource and setting caused the problem. + +Pulumi: Catches many mistakes before you even run it, but errors about Outputs can be confusing. + +### Documentation + +Terraform: Excellent documentation with working examples for every resource across all cloud providers. + +Pulumi: Decent but not as good - Yandex Cloud examples are hard to find and docs vary by programming language. + +### Use Case + +Terraform: Go-to choice for infrastructure teams and when working with multiple cloud providers. + +Pulumi: Better fit for software development teams who already code in Go/Python and need to add complex logic to their infrastructure. + +## 5. Lab 5 Preparation & Cleanup + +VM for Lab 5: + +- Are you keeping your VM for Lab 5? - No +- What will you use for Lab 5? - Local VM diff --git a/terraform/docs/screenshots/image.png b/terraform/docs/screenshots/image.png new file mode 100644 index 0000000000000000000000000000000000000000..6bc9009556caf054afb131eb64ebf1bb949332ee GIT binary patch literal 46999 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