@@ -2,17 +2,10 @@ package cmd
22
33import (
44 "fmt"
5- "os"
6- "path/filepath"
75
8- "github.com/go-git/go-git/v5"
96 deploymentrepo "github.com/openmcp-project/bootstrapper/internal/deployment-repo"
107 "github.com/openmcp-project/bootstrapper/internal/log"
11- ocmcli "github.com/openmcp-project/bootstrapper/internal/ocm-cli"
12- "github.com/openmcp-project/bootstrapper/internal/util"
138 "github.com/spf13/cobra"
14-
15- gitconfig "github.com/openmcp-project/bootstrapper/internal/git-config"
169)
1710
1811const (
@@ -64,140 +57,56 @@ openmcp-bootstrapper manageDeploymentRepo <componentLocation> <templateResourceL
6457 logger .Infof ("Using platform services: %v" , cmd .Flag (FlagPlatformService ).Value .String ())
6558 logger .Infof ("Using image pull secrets: %v" , cmd .Flag (FlagImagePullSecret ).Value .String ())
6659
67- tempDir , err := util .CreateTempDir ("openmcp-bootstrapper-" )
68- if err != nil {
69- return fmt .Errorf ("failed to create temporary directory for deployment repository: %w" , err )
70- }
71- logger .Tracef ("Created temp dir: %s" , tempDir )
72- defer func () {
73- logger .Tracef ("Deleting temp dir: %s" , tempDir )
74- if err := util .DeleteTempDir (tempDir ); err != nil {
75- logger .Errorf ("failed to delete temporary directory %s: %v" , tempDir , err )
76- }
77- }()
78-
79- templateDir := filepath .Join (tempDir , "templates" )
80- err = os .Mkdir (templateDir , 0o755 )
81- if err != nil {
82- return fmt .Errorf ("failed to create template directory: %w" , err )
83- }
84- logger .Tracef ("Created template dir: %s" , templateDir )
85-
86- logger .Infof ("Downloading component %s" , componentLocation )
87-
88- ocmGetter := ocmcli .NewComponentGetter (componentLocation , templateResourceLocation , cmd .Flag (FlagOcmConfig ).Value .String ())
89- err = ocmGetter .InitializeComponents (cmd .Context ())
90- if err != nil {
91- return fmt .Errorf ("failed to initialize components: %w" , err )
92- }
93-
94- logger .Infof ("Downloading templates resource %s" , templateResourceLocation )
95-
96- err = ocmGetter .DownloadTemplatesResource (cmd .Context (), templateDir )
97- if err != nil {
98- return fmt .Errorf ("failed to download templates resource: %w" , err )
99- }
100-
101- logger .Debug ("parsing git config file from flag:" , cmd .Flag (FlagGitConfig ).Value .String ())
102-
103- gitDir := filepath .Join (tempDir , "repo" )
104- err = os .Mkdir (gitDir , 0o755 )
105- if err != nil {
106- return fmt .Errorf ("failed to create git directory: %w" , err )
107- }
108- logger .Tracef ("Created git dir: %s" , gitDir )
109-
110- gitConfig , err := gitconfig .ParseConfig (cmd .Flag (FlagGitConfig ).Value .String ())
60+ clusterProviders , err := cmd .Flags ().GetStringArray (FlagClusterProvider )
11161 if err != nil {
112- return fmt .Errorf ("failed to parse git config: %w" , err )
113- }
114- if err := gitConfig .Validate (); err != nil {
115- return fmt .Errorf ("invalid git config: %w" , err )
116- }
117-
118- cloneOptions := & git.CloneOptions {
119- URL : deploymentRepository ,
120- Progress : LogWriter {},
62+ return fmt .Errorf ("failed to get cluster providers: %w" , err )
12163 }
122- if err := gitConfig .ConfigureCloneOptions (cloneOptions ); err != nil {
123- return fmt .Errorf ("failed to configure git clone options: %w" , err )
124- }
125-
126- logger .Infof ("Cloning deployment repository %s" , deploymentRepository )
127-
128- repo , err := deploymentrepo .CloneRepo (deploymentRepository , gitDir , gitConfig )
64+ serviceProviders , err := cmd .Flags ().GetStringArray (FlagServiceProvider )
12965 if err != nil {
130- return fmt .Errorf ("failed to clone deployment repository : %w" , err )
66+ return fmt .Errorf ("failed to get service providers : %w" , err )
13167 }
132-
133- logger .Infof ("Checking out or creating branch %s" , deploymentRepositoryBranch )
134-
135- err = deploymentrepo .CheckoutAndCreateBranchIfNotExists (repo , deploymentRepositoryBranch , gitConfig )
68+ platformServices , err := cmd .Flags ().GetStringArray (FlagPlatformService )
13669 if err != nil {
137- return fmt .Errorf ("failed to checkout or create branch %s : %w" , deploymentRepositoryBranch , err )
70+ return fmt .Errorf ("failed to get platform services : %w" , err )
13871 }
139-
140- logger .Infof ("Applying templates from %s to deployment repository" , templateResourceLocation )
141-
14272 imagePullSecrets , err := cmd .Flags ().GetStringArray (FlagImagePullSecret )
14373 if err != nil {
144- return fmt .Errorf ("failed to get image pull secrets flag: %w" , err )
145- }
146-
147- templateInput := make (map [string ]interface {})
148- openMCPOperatorCV , err := ocmGetter .GetReferencedComponentVersion (cmd .Context (), "openmcp-operator" )
149- if err == nil {
150- logger .Infof ("Found openmcp-operator component version: %s:%s" , openMCPOperatorCV .Component .Name , openMCPOperatorCV .Component .Version )
151-
152- imageResources := openMCPOperatorCV .GetResourcesByType (ocmcli .OCIImageResourceType )
153- if len (imageResources ) == 0 || imageResources [0 ].Access .ImageReference == nil {
154- return fmt .Errorf ("no image resource found for openmcp-operator component version %s:%s" , openMCPOperatorCV .Component .Name , openMCPOperatorCV .Component .Version )
155- }
156-
157- templateInput ["openmcpOperator" ] = map [string ]interface {}{
158- "version" : openMCPOperatorCV .Component .Version ,
159- "image" : * imageResources [0 ].Access .ImageReference ,
160- "imagePullSecrets" : imagePullSecrets ,
161- }
74+ return fmt .Errorf ("failed to get image pull secrets: %w" , err )
16275 }
16376
164- err = deploymentrepo .TemplateDir (templateDir , templateInput , repo )
165- if err != nil {
166- return fmt .Errorf ("failed to apply templates from directory %s: %w" , templateDir , err )
167- }
77+ deploymentRepoManager , err := deploymentrepo .NewDeploymentRepoManager (
78+ componentLocation ,
79+ templateResourceLocation ,
80+ deploymentRepository ,
81+ deploymentRepositoryBranch ,
82+ cmd .Flag (FlagGitConfig ).Value .String (),
83+ ).WithOcmConfig (cmd .Flag (FlagOcmConfig ).Value .String ()).
84+ WithClusterProviders (clusterProviders ).
85+ WithServiceProviders (serviceProviders ).
86+ WithPlatformServices (platformServices ).
87+ WithImagePullSecrets (imagePullSecrets ).Complete (cmd .Context ())
16888
169- clusterProviders , err := cmd .Flags ().GetStringArray (FlagClusterProvider )
170- if err != nil {
171- return fmt .Errorf ("failed to get cluster providers flag: %w" , err )
172- }
173-
174- serviceProviders , err := cmd .Flags ().GetStringArray (FlagServiceProvider )
175- if err != nil {
176- return fmt .Errorf ("failed to get service providers flag: %w" , err )
177- }
89+ defer func () {
90+ deploymentRepoManager .Cleanup ()
91+ }()
17892
179- platformServices , err := cmd .Flags ().GetStringArray (FlagPlatformService )
18093 if err != nil {
181- return fmt .Errorf ("failed to get platform services flag : %w" , err )
94+ return fmt .Errorf ("failed to initialize deployment repo manager : %w" , err )
18295 }
18396
184- logger .Infof ("Templating providers: clusterProviders=%v, serviceProviders=%v, platformServices=%v, imagePullSecrets=%v" , clusterProviders , serviceProviders , platformServices , imagePullSecrets )
185-
186- err = deploymentrepo .TemplateProviders (cmd .Context (), clusterProviders , serviceProviders , platformServices , imagePullSecrets , ocmGetter , repo )
97+ err = deploymentRepoManager .ApplyTemplates (cmd .Context ())
18798 if err != nil {
188- return fmt .Errorf ("failed to template providers : %w" , err )
99+ return fmt .Errorf ("failed to apply templates : %w" , err )
189100 }
190101
191- logger .Info ("Committing and pushing changes to deployment repository" )
192-
193- err = deploymentrepo .
CommitChanges (
repo ,
"apply templates" ,
"openmcp" ,
"[email protected] " )
102+ err = deploymentRepoManager .ApplyProviders (cmd .Context ())
194103 if err != nil {
195- return fmt .Errorf ("failed to commit changes : %w" , err )
104+ return fmt .Errorf ("failed to apply providers : %w" , err )
196105 }
197106
198- err = deploymentrepo . PushRepo ( repo , deploymentRepositoryBranch , gitConfig )
107+ err = deploymentRepoManager . CommitAndPushChanges ( cmd . Context () )
199108 if err != nil {
200- return fmt .Errorf ("failed to push changes to deployment repository : %w" , err )
109+ return fmt .Errorf ("failed to commit and push changes : %w" , err )
201110 }
202111
203112 return nil
0 commit comments