mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #43054 from lorengordon/fix/yumpkg/config-parser
Uses ConfigParser to read yum config files
This commit is contained in:
commit
96e8e836d1
1 changed files with 26 additions and 33 deletions
|
@ -35,8 +35,10 @@ try:
|
|||
import yum
|
||||
HAS_YUM = True
|
||||
except ImportError:
|
||||
from salt.ext.six.moves import configparser
|
||||
HAS_YUM = False
|
||||
|
||||
from salt.ext.six.moves import configparser
|
||||
|
||||
# pylint: enable=import-error,redefined-builtin
|
||||
|
||||
# Import salt libs
|
||||
|
@ -2524,41 +2526,32 @@ def _parse_repo_file(filename):
|
|||
'''
|
||||
Turn a single repo file into a dict
|
||||
'''
|
||||
repos = {}
|
||||
header = ''
|
||||
repo = ''
|
||||
with salt.utils.fopen(filename, 'r') as rfile:
|
||||
for line in rfile:
|
||||
if line.startswith('['):
|
||||
repo = line.strip().replace('[', '').replace(']', '')
|
||||
repos[repo] = {}
|
||||
parsed = configparser.ConfigParser()
|
||||
config = {}
|
||||
|
||||
# Even though these are essentially uselss, I want to allow the
|
||||
# user to maintain their own comments, etc
|
||||
if not line:
|
||||
if not repo:
|
||||
header += line
|
||||
if line.startswith('#'):
|
||||
if not repo:
|
||||
header += line
|
||||
else:
|
||||
if 'comments' not in repos[repo]:
|
||||
repos[repo]['comments'] = []
|
||||
repos[repo]['comments'].append(line.strip())
|
||||
continue
|
||||
try:
|
||||
parsed.read(filename)
|
||||
except configparser.MissingSectionHeaderError as err:
|
||||
log.error(
|
||||
'Failed to parse file {0}, error: {1}'.format(filename, err.message)
|
||||
)
|
||||
return ('', {})
|
||||
|
||||
# These are the actual configuration lines that matter
|
||||
if '=' in line:
|
||||
try:
|
||||
comps = line.strip().split('=')
|
||||
repos[repo][comps[0].strip()] = '='.join(comps[1:])
|
||||
except KeyError:
|
||||
log.error(
|
||||
'Failed to parse line in %s, offending line was '
|
||||
'\'%s\'', filename, line.rstrip()
|
||||
)
|
||||
for section in parsed._sections:
|
||||
section_dict = dict(parsed._sections[section])
|
||||
section_dict.pop('__name__')
|
||||
config[section] = section_dict
|
||||
|
||||
return (header, repos)
|
||||
# Try to extract leading comments
|
||||
headers = ''
|
||||
with salt.utils.fopen(filename, 'r') as rawfile:
|
||||
for line in rawfile:
|
||||
if line.strip().startswith('#'):
|
||||
headers += '{0}\n'.format(line.strip())
|
||||
else:
|
||||
break
|
||||
|
||||
return (headers, config)
|
||||
|
||||
|
||||
def file_list(*packages):
|
||||
|
|
Loading…
Add table
Reference in a new issue