@@ -5,7 +5,7 @@ use std::path::PathBuf;
55
66use anyhow:: { Context , Result } ;
77use clap:: { Parser , Subcommand } ;
8- use config:: { Config , Machine , Scenario } ;
8+ use config:: { Config , Environment , Installer , Machine } ;
99
1010mod ansible;
1111mod config;
@@ -23,9 +23,18 @@ struct Cli {
2323
2424#[ derive( Subcommand ) ]
2525enum Command {
26- Setup { scenario : String } ,
27- Install { scenario : String } ,
28- Test { scenario : String , testsuite : String } ,
26+ Setup {
27+ environment : String ,
28+ } ,
29+ Install {
30+ environment : String ,
31+ installer : String ,
32+ } ,
33+ Test {
34+ environment : String ,
35+ installer : String ,
36+ testsuite : String ,
37+ } ,
2938}
3039
3140#[ tokio:: main( flavor = "current_thread" ) ]
@@ -34,49 +43,64 @@ async fn main() -> Result<()> {
3443 let config = Config :: load ( & cli. config ) ?;
3544
3645 match cli. command {
37- Command :: Setup { scenario } => {
38- let ( machine, scenario ) = find_scenario ( & config, & scenario ) ?;
39- qemu:: setup ( & machine, & scenario ) . await ?;
46+ Command :: Setup { environment } => {
47+ let ( machine, environment ) = find_environment ( & config, & environment ) ?;
48+ qemu:: setup ( & machine, & environment ) . await ?;
4049 }
41- Command :: Install { scenario } => {
42- let ( machine, scenario) = find_scenario ( & config, & scenario) ?;
43- qemu:: install ( & machine, & scenario) . await ?;
50+ Command :: Install {
51+ environment,
52+ installer,
53+ } => {
54+ let ( machine, environment) = find_environment ( & config, & environment) ?;
55+ let installer = find_installer ( & config, & installer) ?;
56+ qemu:: install ( & machine, & environment, & installer) . await ?;
4457 }
4558 Command :: Test {
46- scenario,
59+ environment,
60+ installer,
4761 testsuite,
4862 } => {
49- let ( machine, scenario) = find_scenario ( & config, & scenario) ?;
63+ let ( machine, environment) = find_environment ( & config, & environment) ?;
64+ let installer = find_installer ( & config, & installer) ?;
5065 let testsuite = config
5166 . testsuites
5267 . iter ( )
5368 . find ( |candidate| candidate. name == testsuite)
5469 . with_context ( || format ! ( "testsuite {testsuite:?} is not defined" ) ) ?;
55- qemu:: test ( & machine, & scenario , testsuite) . await ?;
70+ qemu:: test ( & machine, & environment , & installer , testsuite) . await ?;
5671 }
5772 }
5873
5974 Ok ( ( ) )
6075}
6176
62- fn find_scenario ( config : & Config , name : & str ) -> Result < ( Machine , Scenario ) > {
63- let scenario = config
64- . scenarios
77+ fn find_installer ( config : & Config , name : & str ) -> Result < Installer > {
78+ config
79+ . installers
80+ . iter ( )
81+ . find ( |installer| installer. name == name)
82+ . with_context ( || format ! ( "installer {name:?} is not defined" ) )
83+ . cloned ( )
84+ }
85+
86+ fn find_environment ( config : & Config , name : & str ) -> Result < ( Machine , Environment ) > {
87+ let environment = config
88+ . environments
6589 . iter ( )
66- . find ( |scenario| scenario . name == name)
67- . with_context ( || format ! ( "scenario {name:?} is not defined" ) ) ?
90+ . find ( |environment| environment . name == name)
91+ . with_context ( || format ! ( "environment {name:?} is not defined" ) ) ?
6892 . clone ( ) ;
6993 let machine = config
7094 . machines
7195 . iter ( )
72- . find ( |machine| machine. name == scenario . machine )
96+ . find ( |machine| machine. name == environment . machine )
7397 . with_context ( || {
7498 format ! (
75- "machine {:?} referenced by scenario {:?} is not defined" ,
76- scenario . machine, scenario . name
99+ "machine {:?} referenced by environment {:?} is not defined" ,
100+ environment . machine, environment . name
77101 )
78102 } ) ?
79103 . clone ( ) ;
80104
81- Ok ( ( machine, scenario ) )
105+ Ok ( ( machine, environment ) )
82106}
0 commit comments