@@ -2,50 +2,61 @@ package internal
2
2
3
3
import (
4
4
"fmt"
5
+ "os"
6
+ "strings"
5
7
6
8
"github.com/Azure/aztfy/internal/config"
7
9
"github.com/Azure/aztfy/internal/meta"
8
10
"github.com/Azure/aztfy/internal/tfaddr"
11
+ "github.com/Azure/aztfy/internal/ui/common"
12
+ bspinner "github.com/charmbracelet/bubbles/spinner"
13
+ "github.com/magodo/spinner"
9
14
)
10
15
11
16
func ResourceImport (cfg config.ResConfig ) error {
12
- fmt .Printf ("Target Azure Resource: %s\n " , cfg .ResourceId )
13
17
c , err := meta .NewResMeta (cfg )
14
18
if err != nil {
15
19
return err
16
20
}
17
- fmt .Println ("Initializing..." )
18
- if err := c .Init (); err != nil {
19
- return err
20
- }
21
21
22
- fmt .Println ("Querying Terraform resource type and id..." )
23
- rt , tfid , err := c .QueryResourceTypeAndId ()
24
- if err != nil {
25
- return err
26
- }
22
+ s := bspinner .NewModel ()
23
+ s .Spinner = common .Spinner
27
24
28
- item := meta.ImportItem {
29
- ResourceID : tfid ,
30
- TFAddr : tfaddr.TFAddr {
31
- Type : rt ,
32
- Name : c .ResourceName ,
33
- },
34
- }
25
+ return spinner .Run (s , func (msg spinner.Messager ) error {
26
+ msg .SetStatus ("Initializing..." )
27
+ if err := c .Init (); err != nil {
28
+ return err
29
+ }
35
30
36
- fmt .Printf ("\n Resource type: %s\n Resource Id: %s\n \n " , item .TFAddr .Type , item .ResourceID )
37
- fmt .Println ("Importing..." )
38
- c .Import (& item )
39
- if err := item .ImportError ; err != nil {
40
- return fmt .Errorf ("failed to import %s as %s: %v" , item .ResourceID , item .TFAddr , err )
41
- }
31
+ msg .SetStatus ("Querying Terraform resource type and id..." )
32
+ rt , tfid , err := c .QueryResourceTypeAndId ()
33
+ if err != nil {
34
+ return err
35
+ }
42
36
43
- fmt .Println ("Generating Terraform configurations..." )
44
- if err := c .GenerateCfg (meta.ImportList {item }); err != nil {
45
- return fmt .Errorf ("generating Terraform configuration: %v" , err )
46
- }
37
+ item := meta.ImportItem {
38
+ ResourceID : tfid ,
39
+ TFAddr : tfaddr.TFAddr {
40
+ Type : rt ,
41
+ Name : c .ResourceName ,
42
+ },
43
+ }
44
+ msg .SetDetail (fmt .Sprintf (`Resource Type: %s
45
+ Resource Id : %s` , item .TFAddr .Type , item .ResourceID ))
46
+
47
+ msg .SetStatus ("Importing..." )
48
+ c .Import (& item )
49
+ if err := item .ImportError ; err != nil {
50
+ return fmt .Errorf ("failed to import %s as %s: %v" , item .ResourceID , item .TFAddr , err )
51
+ }
47
52
48
- return nil
53
+ msg .SetStatus ("Generating Terraform configurations..." )
54
+ if err := c .GenerateCfg (meta.ImportList {item }); err != nil {
55
+ return fmt .Errorf ("generating Terraform configuration: %v" , err )
56
+ }
57
+
58
+ return nil
59
+ })
49
60
}
50
61
51
62
func BatchImport (cfg config.RgConfig , continueOnError bool ) error {
@@ -54,38 +65,51 @@ func BatchImport(cfg config.RgConfig, continueOnError bool) error {
54
65
return err
55
66
}
56
67
57
- fmt .Println ("Initializing..." )
58
- if err := c .Init (); err != nil {
59
- return err
60
- }
68
+ s := bspinner .NewModel ()
69
+ s .Spinner = common .Spinner
61
70
62
- fmt .Println ("List resources..." )
63
- list , err := c .ListResource ()
64
- if err != nil {
65
- return err
66
- }
71
+ var warnings []string
72
+ err = spinner .Run (s , func (msg spinner.Messager ) error {
73
+ msg .SetStatus ("Initializing..." )
74
+ if err := c .Init (); err != nil {
75
+ return err
76
+ }
67
77
68
- fmt .Println ("Import resources..." )
69
- for i := range list {
70
- if list [i ].Skip () {
71
- fmt .Printf ("[WARN] No mapping information for resource: %s, skip it\n " , list [i ].ResourceID )
72
- continue
78
+ msg .SetStatus ("Listing resources..." )
79
+ list , err := c .ListResource ()
80
+ if err != nil {
81
+ return err
73
82
}
74
- fmt .Printf ("Importing %s as %s\n " , list [i ].ResourceID , list [i ].TFAddr )
75
- c .Import (& list [i ])
76
- if err := list [i ].ImportError ; err != nil {
77
- msg := fmt .Sprintf ("Failed to import %s as %s: %v" , list [i ].ResourceID , list [i ].TFAddr , err )
78
- if ! continueOnError {
79
- return fmt .Errorf (msg )
83
+
84
+ msg .SetStatus ("Importing resources..." )
85
+ for i := range list {
86
+ if list [i ].Skip () {
87
+ warnings = append (warnings , fmt .Sprintf ("No mapping information for resource: %s, skip it" , list [i ].ResourceID ))
88
+ msg .SetDetail (strings .Join (warnings , "\n " ))
89
+ continue
90
+ }
91
+ msg .SetStatus (fmt .Sprintf ("Importing %s as %s" , list [i ].ResourceID , list [i ].TFAddr ))
92
+ c .Import (& list [i ])
93
+ if err := list [i ].ImportError ; err != nil {
94
+ msg := fmt .Sprintf ("Failed to import %s as %s: %v" , list [i ].ResourceID , list [i ].TFAddr , err )
95
+ if ! continueOnError {
96
+ return fmt .Errorf (msg )
97
+ }
98
+ warnings = append (warnings , msg )
80
99
}
81
- fmt .Println ("[ERROR] " + msg )
82
100
}
83
- }
84
101
85
- fmt .Println ("Generating Terraform configurations..." )
86
- if err := c .GenerateCfg (list ); err != nil {
87
- return fmt .Errorf ("generating Terraform configuration: %v" , err )
102
+ msg .SetStatus ("Generating Terraform configurations..." )
103
+ if err := c .GenerateCfg (list ); err != nil {
104
+ return fmt .Errorf ("generating Terraform configuration: %v" , err )
105
+ }
106
+ return nil
107
+ })
108
+
109
+ // Print out the warnings, if any
110
+ if len (warnings ) != 0 {
111
+ fmt .Fprintln (os .Stderr , "Warnings:\n " + strings .Join (warnings , "\n " ))
88
112
}
89
113
90
- return nil
114
+ return err
91
115
}
0 commit comments