diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py
index 96a7a5e5d9..61785f5337 100755
--- a/kolla/cmd/build.py
+++ b/kolla/cmd/build.py
@@ -517,7 +517,8 @@ class KollaWorker(object):
     def build_image_list(self):
         def process_source_installation(image, section):
             installation = dict()
-            if section not in self.conf.list_all_sections():
+            # NOTE(jeffrey4l): source is not needed when the type is None
+            if self.conf._get('type', self.conf._get_group(section)) is None:
                 LOG.debug('%s:No source location found', section)
             else:
                 installation['type'] = self.conf[section]['type']
@@ -545,17 +546,17 @@ class KollaWorker(object):
             image['plugins'] = list()
 
             if self.install_type == 'source':
-                self.conf.register_opts([
-                    cfg.StrOpt('type'),
-                    cfg.StrOpt('location'),
-                    cfg.StrOpt('reference')
-                ], image['name'])
+                # NOTE(jeffrey4l): register the opts if the section didn't
+                # register in the kolla/common/config.py file
+                if image['name'] not in self.conf._groups:
+                    self.conf.register_opts(common_config.get_source_opts(),
+                                            image['name'])
                 image['source'] = process_source_installation(image,
                                                               image['name'])
                 for plugin in [match.group(0) for match in
                                (re.search('{}-plugin-.+'.format(image['name']),
                                           section) for section in
-                               self.conf.list_all_sections()) if match]:
+                               self.conf._groups) if match]:
                     image['plugins'].append(
                         process_source_installation(image, plugin))
 
diff --git a/kolla/common/config.py b/kolla/common/config.py
index f5d8f48d75..435f8ba190 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -225,7 +225,7 @@ SOURCES = {
 }
 
 
-def _get_source_opt(type_, location, reference=None):
+def get_source_opts(type_=None, location=None, reference=None):
     return [cfg.StrOpt('type', choices=['git', 'url'],
                        default=type_,
                        help='Source location type'),
@@ -236,19 +236,19 @@ def _get_source_opt(type_, location, reference=None):
                              'or branch name'))]
 
 
-def gen_source_opts():
+def gen_all_source_opts():
     for name, params in SOURCES.iteritems():
         type_ = params['type']
         location = params['location']
         reference = params.get('reference')
-        yield name, _get_source_opt(type_, location, reference)
+        yield name, get_source_opts(type_, location, reference)
 
 
 def list_opts():
     return itertools.chain([(None, _CLI_OPTS),
                             (None, _BASE_OPTS),
                             ('profiles', _PROFILE_OPTS)],
-                           gen_source_opts(),
+                           gen_all_source_opts(),
                            )
 
 
@@ -257,6 +257,8 @@ def parse(conf, args, usage=None, prog=None,
     conf.register_cli_opts(_CLI_OPTS)
     conf.register_opts(_BASE_OPTS)
     conf.register_opts(_PROFILE_OPTS, group='profiles')
+    for name, opts in gen_all_source_opts():
+        conf.register_opts(opts, name)
 
     conf(args=args,
          project='kolla',