2020
2121import coloredlogs # type: ignore[import-untyped]
2222import distro
23- from semantic_version import ( SimpleSpec , # type: ignore[import-untyped]
24- Version )
23+ from semantic_version import SimpleSpec # type: ignore[import-untyped]
24+ from semantic_version import Version
2525
2626from .config import read_config
2727from .config .config import (ARCH_AARCH64 , ARCH_AMD , ARCH_ARM , ARCH_PPC ,
2828 ARCH_S390X , ARCH_X86_64 )
2929from .installer import (delete_cluster , download_installer , install_cluster ,
3030 storage )
31+ from .installer .downloader .image import download_rhcos_image , get_url
3132
3233
3334def _identity (in_attr : str ) -> str :
@@ -66,8 +67,6 @@ def _read_list(in_str: str) -> list[str]:
6667 'worker_flavor' : {'help' : 'flavor of worker node' },
6768 'worker_replicas' : {'help' : 'Number of replicas of worker nodes' , 'type' : int },
6869 'certificate_bundle_file' : {'help' : 'CA bundle file' },
69- 'images_dir' : {'help' : 'Directory where images should be stored' , 'type' : str ,
70- 'default' : 'images' },
7170 'skip_clean' : {'help' : 'Skip clean when installation fails' , 'action' : 'store_true' },
7271 'enable_fips' : {'help' : 'Enable fips mode to the cluster' , 'action' : 'store_true' },
7372 },
@@ -174,10 +173,22 @@ def _exec_delete_cluster(args):
174173
175174
176175def _exec_download_insaller (args ):
176+ args .cluster_name = ""
177+ args .installer = None
177178 conf = _merge_dictionaries (args )
178179 print (conf ['installer' ])
179180
180181
182+ def _exec_download_rhcos_image (args ):
183+ args .cluster_name = ""
184+ args .installer = None
185+ args .enable_fips = None
186+ conf = _merge_dictionaries (args )
187+
188+ url , version = get_url (conf ['installer' ])
189+ print (download_rhcos_image (args .images_dir , url , version ))
190+
191+
181192def _get_helper (parser : argparse .ArgumentParser ):
182193 def printer (unused_conf ):
183194 print ("Operation not set, please specify either install or clean!" )
@@ -186,11 +197,20 @@ def printer(unused_conf):
186197 return printer
187198
188199
189- def _create_commons () -> argparse .ArgumentParser :
190- commons = argparse .ArgumentParser (add_help = False )
200+ def _add_cluster_commons (commons : argparse .ArgumentParser ) -> argparse .ArgumentParser :
191201 common_arguments : list [tuple [list [str ], dict ]] = [
192202 (['--cluster-name' ], {"required" : True , "help" : "Name of the cluster" }),
193203 (['--installer' ], {"required" : False , "help" : 'Executable binary of openshift install cli' , "default" : None }),
204+ (['--skip-git' ], {"help" : 'When set, the persistance will be skipped' , "action" : 'store_true' }),
205+ ]
206+ for args , kwargs in common_arguments :
207+ commons .add_argument (* args , ** kwargs )
208+ return commons
209+
210+
211+ def _create_commons () -> argparse .ArgumentParser :
212+ commons = argparse .ArgumentParser (add_help = False )
213+ common_arguments : list [tuple [list [str ], dict ]] = [
194214 (['--installer-version' ], {"help" : 'Version of downloader to be downloaded' , "default" : 'latest' , "type" : str }),
195215 (['--installer-arch' ], {"help" : 'Architecture of downloader to be downloaded' ,
196216 "choices" : [ARCH_AMD , ARCH_X86_64 , ARCH_ARM , ARCH_AARCH64 , ARCH_PPC , ARCH_S390X ],
@@ -199,7 +219,8 @@ def _create_commons() -> argparse.ArgumentParser:
199219 "choices" : ["prod" , "devel" , "prev" ], "default" : 'prod' }),
200220 (['--installers-dir' ], {"help" : 'Folder where installers are stored' , "required" : False ,
201221 "default" : 'installers' }),
202- (['--skip-git' ], {"help" : 'When set, the persistance will be skipped' , "action" : 'store_true' }),
222+ (['--images-dir' ], {"help" : 'Directory where images should be stored' , "required" : False ,
223+ "default" : 'images' }),
203224 (['-v' , '--verbose' ], {"help" : 'Increase verbosity level' , "action" : 'store_true' }),
204225 ]
205226 for args , kwargs in common_arguments :
@@ -210,23 +231,29 @@ def _create_commons() -> argparse.ArgumentParser:
210231def _setup_parser () -> argparse .ArgumentParser :
211232 commons = _create_commons ()
212233
234+ cluster_commons = argparse .ArgumentParser (add_help = False , parents = [commons ])
235+ cluster_commons = _add_cluster_commons (cluster_commons )
236+
213237 parser = argparse .ArgumentParser ("osia" )
214238 parser .set_defaults (func = _get_helper (parser ))
215239 sub_parsers = parser .add_subparsers ()
216240
217- install = sub_parsers .add_parser ('install' , help = 'Install new cluster' , parents = [commons ])
241+ install = sub_parsers .add_parser ('install' , help = 'Install new cluster' , parents = [cluster_commons ])
218242
219243 for arg , value in sorted ({k : v for _ , x in ARGUMENTS .items () for k , v in x .items ()}.items ()):
220244 install .add_argument (f"--{ arg .replace ('_' , '-' )} " ,
221245 ** {k : v for k , v in value .items () if k != 'proc' })
222246 install .set_defaults (func = _exec_install_cluster )
223247
224- clean = sub_parsers .add_parser ('clean' , help = 'Remove cluster' , parents = [commons ])
248+ clean = sub_parsers .add_parser ('clean' , help = 'Remove cluster' , parents = [cluster_commons ])
225249 clean .set_defaults (func = _exec_delete_cluster )
226250
227- download = sub_parsers .add_parser ('download-installer' , help = 'Download installer' , parents = [commons ])
228- download .add_argument ("--enable-fips" , action = 'store_true' )
229- download .set_defaults (func = _exec_download_insaller )
251+ installer = sub_parsers .add_parser ('download-installer' , help = 'Download installer' , parents = [commons ])
252+ installer .add_argument ("--enable-fips" , help = 'Enable fips mode to the cluster' , action = 'store_true' )
253+ installer .set_defaults (func = _exec_download_insaller )
254+
255+ rhcos_image = sub_parsers .add_parser ('download-rhcos-image' , help = 'Download rhcos image' , parents = [commons ])
256+ rhcos_image .set_defaults (func = _exec_download_rhcos_image )
230257
231258 return parser
232259
0 commit comments