1
1
import logging
2
- import yaml
3
2
import os
3
+ import yaml
4
4
5
5
from .staged_base import StagedBaseMixin , handles_type
6
6
from ...model import VHDPushItem , AmiPushItem , AmiRelease , BootMode , KojiBuildInfo
11
11
class StagedCloudMixin (StagedBaseMixin ):
12
12
def __build_ami_push_item (self , resources , src , origin , name ):
13
13
build_resources = resources .get ("build" )
14
+ release_resources = resources .get ("release" , {})
14
15
build_info = KojiBuildInfo (
15
16
name = build_resources .get ("name" ),
16
17
version = build_resources .get ("version" ),
17
- release = build_resources .get ("respin" )
18
+ release = build_resources .get ("respin" ),
18
19
)
19
20
image_kwargs = {
20
21
"name" : name ,
@@ -34,7 +35,7 @@ def __build_ami_push_item(self, resources, src, origin, name):
34
35
)
35
36
36
37
release_required = ["product" , "date" , "arch" , "respin" ]
37
- if all (x in build_resources for x in release_required ):
38
+ if all (x in release_resources . keys () for x in release_required ):
38
39
release_attrs = [
39
40
"product" ,
40
41
"date" ,
@@ -48,7 +49,7 @@ def __build_ami_push_item(self, resources, src, origin, name):
48
49
]
49
50
release_kwargs = {}
50
51
for key in release_attrs :
51
- release_kwargs [key ] = build_resources .get (key )
52
+ release_kwargs [key ] = release_resources .get (key )
52
53
53
54
image_kwargs ["release" ] = AmiRelease (** release_kwargs )
54
55
@@ -81,44 +82,60 @@ def __build_ami_push_item(self, resources, src, origin, name):
81
82
image_kwargs [key ] = resources .get (key )
82
83
83
84
return AmiPushItem (** image_kwargs )
84
-
85
+
85
86
def __build_azure_push_item (self , resources , src , origin , name ):
86
87
build_resources = resources .get ("build" )
87
88
build_info = KojiBuildInfo (
88
89
name = build_resources .get ("name" ),
89
90
version = build_resources .get ("version" ),
90
- release = build_resources .get ("respin" )
91
+ release = build_resources .get ("respin" ),
91
92
)
92
93
image_kwargs = {
93
94
"name" : name ,
94
95
"src" : src ,
96
+ "description" : resources .get ("description" ),
95
97
"build_info" : build_info ,
96
98
"origin" : origin ,
97
99
}
98
100
return VHDPushItem (** image_kwargs )
99
-
100
- @handles_type ("CLOUD_IMAGES" )
101
- def __cloud_push_item (self , leafdir , metadata , entry ):
102
- with open (entry .path , "rt" ) as fh :
103
- raw = yaml .safe_load (fh )
104
- if not raw :
105
- return
106
-
101
+
102
+ def __process_builds (self , build_dirs ):
107
103
out = []
108
- image_type = raw .get ("type" )
109
- images_info = raw .get ("images" )
104
+ for bd in build_dirs :
105
+ yaml_path = os .path .join (bd , "resources.yaml" )
106
+ try :
107
+ with open (yaml_path , "rt" ) as fh :
108
+ raw = yaml .safe_load (fh )
109
+ except FileNotFoundError as e :
110
+ LOG .warning ("No resources.yaml file found at %s (ignored)" , yaml_path )
111
+ continue
112
+ if not raw :
113
+ continue
114
+ image_type = raw .get ("type" , "" )
115
+ images_info = raw .get ("images" , [])
110
116
111
- for image in images_info :
112
- image_relative_path = os .path .join (leafdir .path , image .get ("path" ))
113
- if image_type == "AMI" :
114
- out .append (self .__build_ami_push_item (raw ,
115
- image_relative_path ,
116
- leafdir .topdir ,
117
- image .get ("path" )))
118
- elif image_type == "VHD" :
119
- out .append (self .__build_azure_push_item (raw ,
120
- image_relative_path ,
121
- leafdir .topdir ,
122
- image .get ("path" )))
117
+ for image in images_info :
118
+ if "/" in image .get ("path" ):
119
+ LOG .warning ("Unexpected '/' in %s (ignored)" , image_relative_path )
120
+ continue
121
+ image_relative_path = os .path .join (bd , image .get ("path" ))
122
+ if image_type == "AMI" :
123
+ out .append (
124
+ self .__build_ami_push_item (
125
+ raw , image_relative_path , bd , image .get ("path" )
126
+ )
127
+ )
128
+ elif image_type == "VHD" :
129
+ out .append (
130
+ self .__build_azure_push_item (
131
+ raw , image_relative_path , bd , image .get ("path" )
132
+ )
133
+ )
134
+ return out
135
+
136
+ @handles_type ("CLOUD_IMAGES" )
137
+ def __cloud_push_item (self , leafdir , _ , entry ):
138
+ builds = [ f .path for f in os .scandir (leafdir .path ) if f .is_dir () ]
139
+ out = self .__process_builds (builds )
123
140
124
- return out
141
+ return out
0 commit comments