@@ -4,45 +4,70 @@ import json
44
55# Note range is exclusive so the last number is not in the list
66PUPPET_VERSION = '>= 6.1.0 < 8.0.0'
7- UNSUPPORTED_EL = {str (i ) for i in range (3 , 7 )}
7+ UNSUPPORTED_EL = {str (i ) for i in range (3 , 10 )}
88UNSUPPORTED = {
99 'CentOS' : UNSUPPORTED_EL ,
10- 'Debian' : {str (i ) for i in range (3 , 9 )},
11- 'Fedora' : {str (i ) for i in range (3 , 33 )},
10+ 'Debian' : {str (i ) for i in range (3 , 12 )},
11+ 'Fedora' : {str (i ) for i in range (3 , 41 )},
1212 'OracleLinux' : UNSUPPORTED_EL ,
1313 'RedHat' : UNSUPPORTED_EL ,
14- 'SLED' : {'9' , '10 ' },
15- 'SLES' : {'9' , '10 ' },
14+ 'SLED' : {'9' , '15 ' },
15+ 'SLES' : {'9' , '15.3 ' },
1616 'Scientific' : UNSUPPORTED_EL ,
17- 'Ubuntu' : {str (i ) + m for i in range (4 , 18 ) for m in ('.04' , '.10' )},
17+ 'Ubuntu' : {str (i ) + m for i in range (4 , 22 ) for m in ('.04' , '.10' )},
1818}
1919
20+ # Find all metadata.json files in the specified directory structure.
2021for filename in glob .glob ('modules/*/*/metadata.json' ):
21- print ('Reading {}' . format ( filename ) )
22+ print (f 'Reading { filename } ' )
2223
2324 with open (filename ) as fp :
2425 metadata = json .load (fp )
2526
2627 updated = False
2728
29+ # Update Puppet Version Requirement
2830 for req in metadata .get ('requirements' , []):
2931 if req ['name' ] == 'puppet' and req ['version_requirement' ] != PUPPET_VERSION :
3032 req ['version_requirement' ] = PUPPET_VERSION
3133 updated = True
34+ print (f'Updating Puppet version requirement to { PUPPET_VERSION } ' )
3235
33- for operatingsystem in metadata .get ('operatingsystem_support' , []):
34- releases = set (operatingsystem .get ('operatingsystemrelease' , []))
35- for release in releases & UNSUPPORTED .get (operatingsystem ['operatingsystem' ], set ()):
36- print ('Removing {}-{}' .format (operatingsystem ['operatingsystem' ], release ))
37- operatingsystem ['operatingsystemrelease' ].remove (release )
38- updated = True
36+ # Clean Up Unsupported OS and Versions (Safe Logic)
37+ original_os_support = metadata .get ('operatingsystem_support' , [])
38+ new_os_support = []
3939
40- if operatingsystem .get ('operatingsystemrelease' ) == []:
41- print ('Removing {}' .format (operatingsystem ['operatingsystem' ]))
42- metadata ['operatingsystem_support' ].remove (operatingsystem )
43- updated = True
40+ # Iterate over each OS entry (e.g., CentOS, Ubuntu).
41+ for os_entry in original_os_support :
42+ current_releases = os_entry .get ('operatingsystemrelease' , [])
43+
44+ # If an OS entry has no specific releases listed (like 'Archlinux'), keep it unconditionally.
45+ if not current_releases :
46+ new_os_support .append (os_entry )
47+ continue
48+
49+ # Get the set of unsupported versions for the current OS. Defaults to an empty set if not found.
50+ unsupported_for_os = UNSUPPORTED .get (os_entry ['operatingsystem' ], set ())
51+
52+ filtered_releases = [r for r in current_releases if r not in unsupported_for_os ]
53+
54+ if filtered_releases :
55+ os_entry ['operatingsystemrelease' ] = filtered_releases
56+ new_os_support .append (os_entry )
57+ # If all releases were unsupported, the OS entry is effectively dropped.
58+
59+ # Log
60+ removed_releases = set (current_releases ) - set (filtered_releases )
61+ for release in removed_releases :
62+ print (f"Removing { os_entry ['operatingsystem' ]} -{ release } " )
63+
64+ # If the OS list has changed, update the metadata and set the updated flag.
65+ if original_os_support != new_os_support :
66+ metadata ['operatingsystem_support' ] = new_os_support
67+ updated = True
4468
4569 if updated :
46- print ('Writing {}' . format ( filename ) )
70+ print (f 'Writing { filename } ' )
4771 with open (filename , 'w' ) as fp :
48- fp .write (json .dumps (metadata , indent = 2 ) + "\n " )
72+ # Use indent for readability and ensure_ascii=False for special characters.
73+ fp .write (json .dumps (metadata , indent = 2 , ensure_ascii = False ) + "\n " )
0 commit comments