@@ -97,6 +97,13 @@ def md5sum_file(path):
97
97
return h .hexdigest ()
98
98
99
99
100
+ class RpmListType (IntEnum ):
101
+ COMMITMETA = 1
102
+ EXTENSIONS = 2
103
+ HOST = 3
104
+ META = 4
105
+
106
+
100
107
class Build (_Build ):
101
108
"""
102
109
Koji implementation of Build.
@@ -113,12 +120,28 @@ class Build(_Build):
113
120
"require_commit" : True ,
114
121
"require_cosa" : True ,
115
122
})
116
- _Build .__init__ (self , ** kwargs )
117
- self .version , self .release = self .build_id .split ('-' )
118
- self .name = f"{ self .build_name } -{ self .basearch } "
119
- self .source = self .get_meta_key (
120
- "meta" , self .ckey ("container-config-git" ))
121
- self .host_rpms = self .get_rpm_list (RpmListType .HOST )
123
+ if kwargs .get ('node_image' ) is True :
124
+ self .version = kwargs ['build' ].replace ("-" , "." )
125
+ self .release = "0"
126
+ self ._build_dir = self .buildroot
127
+ self ._basearch = kwargs ['arch' ]
128
+ self .name = f"rhcos-{ self .basearch } "
129
+ self .source = "https://github.com/openshift/os"
130
+ self .meta_file_path = f"{ kwargs ['buildroot' ]} /meta.json"
131
+ self ._found_files = {}
132
+ self ._build_json = {}
133
+ with open (self .meta_file_path ) as f :
134
+ self ._build_json ['meta' ] = json .load (f )
135
+ # We use podman build, there is no need for host rpms
136
+ self .host_rpms = ""
137
+ else :
138
+ _Build .__init__ (self , ** kwargs )
139
+ self .version , self .release = self .build_id .split ('-' )
140
+ self .name = f"{ self .build_name } -{ self .basearch } "
141
+ self .source = self .get_meta_key (
142
+ "meta" , self .ckey ("container-config-git" ))
143
+ self .host_rpms = self .get_rpm_list (RpmListType .HOST )
144
+
122
145
def __del__ (self ):
123
146
try :
124
147
shutil .rmtree (self ._tmpdir )
@@ -388,11 +411,6 @@ def kinit(keytab, principle):
388
411
except Exception as err :
389
412
raise Exception ("failed to auth: " , err )
390
413
391
- class RpmListType (IntEnum ):
392
- COMMITMETA = 1
393
- EXTENSIONS = 2
394
- HOST = 3
395
- META = 4
396
414
397
415
class _KojiBase ():
398
416
"""
@@ -561,7 +579,11 @@ class Reserve(_KojiBase):
561
579
'token' : koji_reservation ['token' ],
562
580
'release' : build .release
563
581
}
564
- build .meta_write ()
582
+ if hasattr (build , 'meta_file_path' ) and build .meta_file_path :
583
+ with open (build .meta_file_path , "w" ) as f :
584
+ json .dump (build .meta , f , indent = 2 )
585
+ else :
586
+ build .meta_write ()
565
587
566
588
567
589
class Upload (_KojiBase ):
@@ -745,9 +767,16 @@ class Upload(_KojiBase):
745
767
'public-url' : self ._s3_url
746
768
}
747
769
self .build .meta_write ()
770
+ if 'origin' in self .build .source :
771
+ source = self .build .source ['origin' ]
772
+ commit = self .build .source ['commit' ]
773
+ meta = False
774
+ else :
775
+ source = self .build .source
776
+ commit = ""
777
+ meta = True
748
778
749
-
750
- log .debug (f"Preparing manifest for { (len (self .image_files ))} files" )
779
+ log .debug (f"Preparing manifest for { (len (self .get_image_files (meta = meta )))} files" )
751
780
# The koji/brew NVR is constructed like so:
752
781
# Name = "rhcos-$arch", like `rhcos-x86_64`
753
782
# Version = Everything before `-` in RHCOS version
@@ -773,7 +802,7 @@ class Upload(_KojiBase):
773
802
"name" : self .build .name ,
774
803
"release" : self .build .release ,
775
804
"owner" : self ._owner ,
776
- "source" : self . build . source [ 'origin' ] ,
805
+ "source" : source ,
777
806
"start_time" : stamp ,
778
807
"version" : self .build .version
779
808
},
@@ -785,7 +814,7 @@ class Upload(_KojiBase):
785
814
},
786
815
"content_generator" : {
787
816
"name" : "coreos-assembler" ,
788
- "version" : self . build . source [ ' commit' ]
817
+ "version" : commit
789
818
},
790
819
"container" : {
791
820
"type" : "docker" ,
@@ -803,11 +832,11 @@ class Upload(_KojiBase):
803
832
"tools" : [
804
833
{
805
834
"name" : "coreos-assembler" ,
806
- "version" : self . build . source [ ' commit' ]
835
+ "version" : commit
807
836
}
808
837
]
809
838
}],
810
- "output" : self .image_files
839
+ "output" : self .get_image_files ( meta = meta )
811
840
}
812
841
813
842
return self ._manifest
@@ -960,7 +989,9 @@ Environment variables are supported:
960
989
help = "Do not upload, just parse the build" )
961
990
parent_parser .add_argument ("--arch" , default = get_basearch (),
962
991
help = "Set the build architecture" )
963
-
992
+ # Node image sytle update
993
+ parent_parser .add_argument ("--node-image" , action = 'store_true' , required = False ,
994
+ help = "Brew uploads for node image sytle" )
964
995
# Koji specific options
965
996
parent_parser .add_argument ("--no-auth" , action = 'store_false' , dest = "auth" ,
966
997
help = "Skip Kerberos auth, use if already auth'd" )
@@ -1043,7 +1074,8 @@ Environment variables are supported:
1043
1074
1044
1075
args = parser .parse_args (namespace = args )
1045
1076
1046
- build = Build (buildroot = args .buildroot , build = args .build , arch = args .arch )
1077
+ build = Build (buildroot = args .buildroot , build = args .build , arch = args .arch ,
1078
+ node_image = args .node_image )
1047
1079
1048
1080
if args .auth :
1049
1081
kinit (args .keytab , args .owner )
0 commit comments