~canonical-platform-qa/snappy-ecosystem-tests/fixing_ci

« back to all changes in this revision

Viewing changes to snappy_ecosystem_tests/commons/config.py

  • Committer: Heber Parrucci
  • Date: 2017-02-15 19:14:19 UTC
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: heber.parrucci@canonical.com-20170215191419-a3549ap02gflc8rj
Addressing review feedback regarding credentials:
Now it is read from a user config file that is outside the repo in the host machine. If that config is not found, then it reads the credentials from env variables.
The idea is to store the config with the credentials in a private repository, and then Jenkins will get it and store in the host machine when running the tests.
The same mechanism is used in ubuntu-system-tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
import logging
25
25
import os
26
26
 
27
 
from snappy_ecosystem_tests.utils.singleton import Singleton
28
 
 
29
27
LOGGER = logging.getLogger(__name__)
30
28
 
31
29
DEFAULT_CONF = 'ecosystem_tests.cfg'
39
37
    return conf_dir
40
38
 
41
39
 
 
40
def get_user_config_dir():
 
41
    """Return the path to the user configuration directory."""
 
42
    conf_dir = os.environ.get(
 
43
        'XDG_USER_CONFIG_HOME', os.path.expanduser('~/.config'))
 
44
    return conf_dir
 
45
 
 
46
 
42
47
def get_config_section():
43
48
    """Return the name of config section to use."""
44
49
    return os.environ.get('CONFIG_SECTION', KEY_DEFAULT)
51
56
    return ecosystem_config
52
57
 
53
58
 
54
 
class ConfigStack(metaclass=Singleton):
55
 
    """Singleton class to store the snappy ecosystem config stack"""
 
59
class ConfigStack:
 
60
    """Class that represents different config stacks"""
56
61
 
57
 
    def __init__(self):
58
 
        self.__config = None
 
62
    def __init__(self, dir_path=None, file_name=None):
 
63
        self.__config = self.__create_config_stack(dir_path, file_name)
59
64
 
60
65
    @property
61
66
    def config(self):
73
78
        self.__config = self.__create_config_stack(dir_path, file_name)
74
79
 
75
80
    def release_config(self):
76
 
        """Release the current config for those cases that explicitly want to modify it"""
 
81
        """Release the current config for those cases that
 
82
         explicitly want to modify it"""
77
83
        self.__config = None
78
84
 
79
85
    def __get_config(self):
91
97
        If None it takes the default one stored in DEFAULT_CONF
92
98
        :return the created config as a dict
93
99
        """
94
 
        full_path = os.path.join(dir_path or get_config_dir(), file_name or DEFAULT_CONF)
 
100
        full_path = os.path.join(dir_path or get_config_dir(),
 
101
                                 file_name or DEFAULT_CONF)
95
102
        return _get_config_stack_from_file(full_path)
96
103
 
97
104
 
103
110
        """
104
111
        Construct the config and parser object.
105
112
        :param file_name: Name of config file to load. Default file is used if
106
 
                          value is not specified.
 
113
        value is not specified.
107
114
        """
108
115
        user_config_dir = get_config_dir()
109
116
        if not os.path.exists(user_config_dir):
115
122
 
116
123
    def set(self, section, option_name, value):
117
124
        """Set a config value for the given section.
118
 
        :param section: the section of the config in which update the given value
 
125
        :param section: the section of the config in which update
 
126
         the given value
119
127
        :param option_name: Name of config option.
120
128
        :param value: Value to set.
121
129
        """
124
132
 
125
133
    def get(self, section, option_name, default=''):
126
134
        """Get a config value for a given section.
127
 
        If section and/or value are not found, return default if provided or raise exception
128
 
        :param section: the section of the config in which search for the given value
 
135
        If section and/or value are not found, return default if
 
136
        provided or raise exception
 
137
        :param section: the section of the config in which search
 
138
        for the given value.
129
139
        :param option_name: Name of config option to get.
130
 
        :param default: Value to return as default if section and/or item don't exist.
131
 
        :return: Config option value if it exists. In case that section and/or item don't exists,
 
140
        :param default: Value to return as default if section and/or
 
141
        item don't exist.
 
142
        :return: Config option value if it exists. In case that section
 
143
        and/or item don't exists,
132
144
        then return default value if provided, or raise exception"""
133
145
        try:
134
146
            return self.config.get(section, option_name)
157
169
        self.config.read(self.file_path)
158
170
 
159
171
 
160
 
CONFIG_STACK = ConfigStack()
 
172
CONFIG_STACK = ConfigStack().config
 
173
USER_CONFIG_STACK = ConfigStack(dir_path=get_user_config_dir()).config