Skip to content

Commit 42999f4

Browse files
feat: feat/add-vcenter-operation
1 parent 4271c63 commit 42999f4

File tree

10 files changed

+380
-51
lines changed

10 files changed

+380
-51
lines changed

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@ collection of dagger modules
44

55
## MODULES
66

7+
<details><summary><b>GIT</b></summary>
8+
9+
```bash
10+
dagger call -m git clone-git-hub \
11+
--repository stuttgart-things/stuttgart-things \
12+
--token env:GITHUB_TOKEN \
13+
-vv --progress plain \
14+
export --path=/tmp/repo
15+
```
16+
17+
</details>
18+
19+
720
<details><summary><b>SOPS</b></summary>
821

922
```bash
@@ -163,6 +176,40 @@ dagger call -m packer build \
163176
--progress plain -vv
164177
```
165178

179+
```bash
180+
# MOVE VM TEMPLATE
181+
export VCENTER_FQDN=https://10.100.135.50/sdk
182+
export VCENTER_USER=<>
183+
export VCENTER_PASSWORD<>
184+
185+
dagger call -m packer vcenteroperation \
186+
--operation move \
187+
--vcenter env:VCENTER_FQDN \
188+
--username env:VCENTER_USER \
189+
--password env:VCENTER_PASSWORD \
190+
--source /Datacenter/vm/stuttgart-things/rancher-things/sthings-app-4 \
191+
--target /Datacenter/vm/stuttgart-things/testing/ \
192+
--progress plain -vv
193+
```
194+
195+
```bash
196+
# RENAME VM TEMPLATE
197+
export VCENTER_FQDN=https://10.100.135.50/sdk
198+
export VCENTER_USER=<>
199+
export VCENTER_PASSWORD<>
200+
201+
dagger call -m packer vcenteroperation \
202+
--operation rename \
203+
--vcenter env:VCENTER_FQDN \
204+
--username env:VCENTER_USER \
205+
--password env:VCENTER_PASSWORD \
206+
--source /Datacenter/vm/stuttgart-things/vm-templates/u22-rke2-ipi \
207+
--target u22-rke2-old \
208+
--progress plain -vv
209+
```
210+
211+
212+
166213
</details>
167214

168215
<details><summary><b>KYVERNO</b></summary>
@@ -411,6 +458,7 @@ dagger call -m ansible execute \
411458
--ssh-password=env:SSH_PASSWORD \
412459
--parameters "send_to_homerun=false" \
413460
-vv --progress plain
461+
```
414462

415463
the idea of this module is to create versioned collection artifcat 'on the fly' -
416464
this module can work with a file structure like this:

git/.gitattributes

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/dagger.gen.go linguist-generated
2+
/internal/dagger/** linguist-generated
3+
/internal/querybuilder/** linguist-generated
4+
/internal/telemetry/** linguist-generated

git/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/dagger.gen.go
2+
/internal/dagger
3+
/internal/querybuilder
4+
/internal/telemetry
5+
/.env

git/dagger.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "git",
3+
"engineVersion": "v0.18.10",
4+
"sdk": {
5+
"source": "go"
6+
},
7+
"dependencies": [
8+
{
9+
"name": "gh",
10+
"source": "github.com/sagikazarmark/daggerverse/gh@gh/v0.11.0",
11+
"pin": "c1be27189ce47d28f84014b715f78e47db9fbadc"
12+
}
13+
]
14+
}

git/go.mod

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
module dagger/git
2+
3+
go 1.24.4
4+
5+
require (
6+
github.com/99designs/gqlgen v0.17.74
7+
github.com/Khan/genqlient v0.8.1
8+
github.com/vektah/gqlparser/v2 v2.5.27
9+
go.opentelemetry.io/otel v1.35.0
10+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0
11+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0
12+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0
13+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0
14+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0
15+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0
16+
go.opentelemetry.io/otel/log v0.8.0
17+
go.opentelemetry.io/otel/metric v1.35.0
18+
go.opentelemetry.io/otel/sdk v1.35.0
19+
go.opentelemetry.io/otel/sdk/log v0.8.0
20+
go.opentelemetry.io/otel/sdk/metric v1.35.0
21+
go.opentelemetry.io/otel/trace v1.35.0
22+
go.opentelemetry.io/proto/otlp v1.3.1
23+
golang.org/x/sync v0.15.0
24+
google.golang.org/grpc v1.73.0
25+
)
26+
27+
require (
28+
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
29+
github.com/go-logr/logr v1.4.2 // indirect
30+
github.com/go-logr/stdr v1.2.2 // indirect
31+
github.com/google/uuid v1.6.0 // indirect
32+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect
33+
github.com/sosodev/duration v1.3.1 // indirect
34+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
35+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 // indirect
36+
golang.org/x/net v0.41.0 // indirect
37+
golang.org/x/sys v0.33.0 // indirect
38+
golang.org/x/text v0.26.0 // indirect
39+
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 // indirect
40+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect
41+
google.golang.org/protobuf v1.36.6 // indirect
42+
)
43+
44+
replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0
45+
46+
replace go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp => go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0
47+
48+
replace go.opentelemetry.io/otel/log => go.opentelemetry.io/otel/log v0.8.0
49+
50+
replace go.opentelemetry.io/otel/sdk/log => go.opentelemetry.io/otel/sdk/log v0.8.0

git/go.sum

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
github.com/99designs/gqlgen v0.17.74 h1:1FuVtkXxOc87xpKio3f6sohREmec+Jvy86PcYOuwgWo=
2+
github.com/99designs/gqlgen v0.17.74/go.mod h1:a+iR6mfRLNRp++kDpooFHiPWYiWX3Yu1BIilQRHgh10=
3+
github.com/Khan/genqlient v0.8.1 h1:wtOCc8N9rNynRLXN3k3CnfzheCUNKBcvXmVv5zt6WCs=
4+
github.com/Khan/genqlient v0.8.1/go.mod h1:R2G6DzjBvCbhjsEajfRjbWdVglSH/73kSivC9TLWVjU=
5+
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
6+
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
7+
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
8+
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
9+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
10+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
11+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
12+
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
13+
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
14+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
15+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
16+
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
17+
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
18+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
19+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
20+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
21+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
22+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 h1:ad0vkEBuk23VJzZR9nkLVG0YAoN9coASF1GusYX6AlU=
23+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0/go.mod h1:igFoXX2ELCW06bol23DWPB5BEWfZISOzSP5K2sbLea0=
24+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
25+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
26+
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
27+
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
28+
github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4=
29+
github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg=
30+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
31+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
32+
github.com/vektah/gqlparser/v2 v2.5.27 h1:RHPD3JOplpk5mP5JGX8RKZkt2/Vwj/PZv0HxTdwFp0s=
33+
github.com/vektah/gqlparser/v2 v2.5.27/go.mod h1:D1/VCZtV3LPnQrcPBeR/q5jkSQIPti0uYCP/RI0gIeo=
34+
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
35+
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
36+
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
37+
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
38+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 h1:WzNab7hOOLzdDF/EoWCt4glhrbMPVMOO5JYTmpz36Ls=
39+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0/go.mod h1:hKvJwTzJdp90Vh7p6q/9PAOd55dI6WA6sWj62a/JvSs=
40+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 h1:S+LdBGiQXtJdowoJoQPEtI52syEP/JYBUpjO49EQhV8=
41+
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0/go.mod h1:5KXybFvPGds3QinJWQT7pmXf+TN5YIa7CNYObWRkj50=
42+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 h1:j7ZSD+5yn+lo3sGV69nW04rRR0jhYnBwjuX3r0HvnK0=
43+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0/go.mod h1:WXbYJTUaZXAbYd8lbgGuvih0yuCfOFC5RJoYnoLcGz8=
44+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 h1:t/Qur3vKSkUCcDVaSumWF2PKHt85pc7fRvFuoVT8qFU=
45+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0/go.mod h1:Rl61tySSdcOJWoEgYZVtmnKdA0GeKrSqkHC1t+91CH8=
46+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 h1:IJFEoHiytixx8cMiVAO+GmHR6Frwu+u5Ur8njpFO6Ac=
47+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0/go.mod h1:3rHrKNtLIoS0oZwkY2vxi+oJcwFRWdtUyRII+so45p8=
48+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 h1:9kV11HXBHZAvuPUZxmMWrH8hZn/6UnHX4K0mu36vNsU=
49+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0/go.mod h1:JyA0FHXe22E1NeNiHmVp7kFHglnexDQ7uRWDiiJ1hKQ=
50+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0 h1:cMyu9O88joYEaI47CnQkxO1XZdpoTF9fEnW2duIddhw=
51+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.32.0/go.mod h1:6Am3rn7P9TVVeXYG+wtcGE7IE1tsQ+bP3AuWcKt/gOI=
52+
go.opentelemetry.io/otel/log v0.8.0 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk=
53+
go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8=
54+
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
55+
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
56+
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
57+
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
58+
go.opentelemetry.io/otel/sdk/log v0.8.0 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs=
59+
go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo=
60+
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
61+
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
62+
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
63+
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
64+
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
65+
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
66+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
67+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
68+
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
69+
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
70+
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
71+
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
72+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
73+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
74+
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
75+
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
76+
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM=
77+
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8=
78+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
79+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
80+
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
81+
google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
82+
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
83+
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
84+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
85+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

git/main.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package main
2+
3+
import (
4+
"dagger/git/internal/dagger"
5+
)
6+
7+
type Git struct{}
8+
9+
func (m *Git) CloneGitHub(repository string, token *dagger.Secret) *dagger.Directory {
10+
return dag.
11+
Gh().
12+
Repo().
13+
Clone(repository, dagger.GhRepoCloneOpts{Token: token})
14+
}

packer/container.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package main
2+
3+
import (
4+
"dagger/packer/internal/dagger"
5+
"fmt"
6+
)
7+
8+
func (m *Packer) container(
9+
// The Packer version to use
10+
// +optional
11+
// +default="1.13.1"
12+
packerVersion,
13+
// The Packer arch
14+
// +optional
15+
// +default="linux_amd64"
16+
arch string) *dagger.Container {
17+
18+
if m.BaseImage == "" {
19+
m.BaseImage = "cgr.dev/chainguard/wolfi-base:latest"
20+
}
21+
22+
var (
23+
packerBin = "packer"
24+
packerZip = fmt.Sprintf("%s_%s_%s.zip", packerBin, packerVersion, arch)
25+
packerURL = fmt.Sprintf("https://releases.hashicorp.com/%s/%s/%s", packerBin, packerVersion, packerZip)
26+
destBinPath = "/usr/bin/" + packerBin
27+
28+
// Govc configuration
29+
govcVersion = "0.51.0"
30+
govcArch = "Linux_x86_64"
31+
govcURL = fmt.Sprintf("https://github.com/vmware/govmomi/releases/download/v%s/govc_%s.tar.gz", govcVersion, govcArch)
32+
govcTarball = fmt.Sprintf("govc_%s.tar.gz", govcArch)
33+
)
34+
35+
ctr := dag.Container().From(m.BaseImage)
36+
37+
// Install base packages + Ansible dependencies with Wolfi-compatible names
38+
ctr = ctr.WithExec([]string{"apk", "add", "--no-cache",
39+
"wget",
40+
"unzip",
41+
"bash",
42+
"coreutils",
43+
"python3",
44+
"py3-pip",
45+
"openssh-client",
46+
"ca-certificates-bundle",
47+
"cdrkit",
48+
"git",
49+
"sshpass",
50+
"gzip", // Already correct in Wolfi
51+
})
52+
53+
// Install Ansible via pip
54+
ctr = ctr.WithExec([]string{"pip3", "install", "--no-cache-dir", "ansible", "hvac", "passlib"})
55+
56+
// Install Packer
57+
ctr = ctr.WithExec([]string{"wget", "-q", packerURL}) // Added -q for quieter output
58+
ctr = ctr.WithExec([]string{"unzip", "-q", packerZip}) // Added -q for quieter output
59+
ctr = ctr.WithExec([]string{"mv", packerBin, destBinPath})
60+
ctr = ctr.WithExec([]string{"chmod", "+x", destBinPath})
61+
ctr = ctr.WithExec([]string{"rm", packerZip}) // Clean up packer zip
62+
63+
// Install govc
64+
ctr = ctr.WithExec([]string{"wget", "-q", govcURL, "-O", govcTarball})
65+
ctr = ctr.WithExec([]string{"tar", "-xzf", govcTarball})
66+
ctr = ctr.WithExec([]string{"mv", "govc", "/usr/bin"})
67+
ctr = ctr.WithExec([]string{"chmod", "+x", "/usr/bin/govc"})
68+
ctr = ctr.WithExec([]string{"rm", govcTarball}) // Clean up tarball
69+
70+
return ctr
71+
}

packer/main.go

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -102,57 +102,6 @@ func (m *Packer) Build(
102102
if err != nil {
103103
fmt.Errorf("failed to initialize: %w", err)
104104
}
105-
106-
}
107-
108-
func (m *Packer) container(
109-
// The Packer version to use
110-
// +optional
111-
// +default="1.12.0"
112-
packerVersion,
113-
// The Packer arch
114-
// +optional
115-
// +default="linux_amd64"
116-
arch string) *dagger.Container {
117-
118-
if m.BaseImage == "" {
119-
m.BaseImage = "cgr.dev/chainguard/wolfi-base:latest"
120-
}
121-
122-
var (
123-
packerBin = "packer"
124-
packerZip = fmt.Sprintf("%s_%s_%s.zip", packerBin, packerVersion, arch)
125-
packerURL = fmt.Sprintf("https://releases.hashicorp.com/%s/%s/%s", packerBin, packerVersion, packerZip)
126-
destBinPath = "/usr/bin/" + packerBin
127-
)
128-
129-
ctr := dag.Container().From(m.BaseImage)
130-
131-
// Install base packages + Ansible dependencies
132-
ctr = ctr.WithExec([]string{"apk", "add", "--no-cache",
133-
"wget",
134-
"unzip",
135-
"bash",
136-
"coreutils",
137-
"python3",
138-
"py3-pip",
139-
"openssh-client",
140-
"ca-certificates-bundle",
141-
"cdrkit",
142-
"git",
143-
"sshpass",
144-
})
145-
146-
// Install Ansible via pip
147-
ctr = ctr.WithExec([]string{"pip3", "install", "--no-cache-dir", "ansible", "hvac", "passlib"})
148-
149-
// Install Packer
150-
ctr = ctr.WithExec([]string{"wget", packerURL})
151-
ctr = ctr.WithExec([]string{"unzip", packerZip})
152-
ctr = ctr.WithExec([]string{"mv", packerBin, destBinPath})
153-
ctr = ctr.WithExec([]string{"chmod", "+x", destBinPath})
154-
155-
return ctr
156105
}
157106

158107
// ClonePrivateRepo clones a private GitHub repo using HTTPS and a personal access token

0 commit comments

Comments
 (0)