Kolla provides production-ready containers and deployment tools for operating OpenStack clouds
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

config.py 39KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195
  1. # Licensed under the Apache License, Version 2.0 (the "License");
  2. # you may not use this file except in compliance with the License.
  3. # You may obtain a copy of the License at
  4. #
  5. # http://www.apache.org/licenses/LICENSE-2.0
  6. #
  7. # Unless required by applicable law or agreed to in writing, software
  8. # distributed under the License is distributed on an "AS IS" BASIS,
  9. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. # See the License for the specific language governing permissions and
  11. # limitations under the License.
  12. import itertools
  13. import os
  14. from oslo_config import cfg
  15. from oslo_config import types
  16. from kolla.version import version_info as version
  17. BASE_OS_DISTRO = ['centos', 'rhel', 'ubuntu', 'oraclelinux', 'debian']
  18. BASE_ARCH = ['x86_64', 'ppc64le', 'aarch64']
  19. DEFAULT_BASE_TAGS = {
  20. 'centos': '7',
  21. 'rhel': '7',
  22. 'oraclelinux': '7-slim',
  23. 'debian': 'stretch-backports',
  24. 'ubuntu': '18.04',
  25. }
  26. DISTRO_RELEASE = {
  27. 'centos': '7',
  28. 'rhel': '7',
  29. 'oraclelinux': '7',
  30. 'debian': 'stretch-backports',
  31. 'ubuntu': '18.04',
  32. }
  33. # This is noarch repository so we will use it on all architectures
  34. DELOREAN = \
  35. "https://trunk.rdoproject.org/centos7/current-passed-ci/delorean.repo"
  36. DELOREAN_DEPS = "https://trunk.rdoproject.org/centos7/delorean-deps.repo"
  37. INSTALL_TYPE_CHOICES = ['binary', 'source', 'rdo', 'rhos']
  38. TARBALLS_BASE = "http://tarballs.openstack.org"
  39. _PROFILE_OPTS = [
  40. cfg.ListOpt('infra',
  41. default=[
  42. 'ceph',
  43. 'certmonger',
  44. 'cron',
  45. 'elasticsearch',
  46. 'etcd',
  47. 'fluentd',
  48. 'haproxy',
  49. 'keepalived',
  50. 'kibana',
  51. 'kolla-toolbox',
  52. 'logstash',
  53. 'mariadb',
  54. 'memcached',
  55. 'mongodb',
  56. 'opendaylight',
  57. 'openvswitch',
  58. 'ptp',
  59. 'qdrouterd',
  60. 'rabbitmq',
  61. 'redis',
  62. 'rsyslog',
  63. 'skydive',
  64. 'storm',
  65. 'tgtd',
  66. ],
  67. help='Infra images'),
  68. cfg.ListOpt('main',
  69. default=[
  70. 'ceilometer',
  71. 'cinder',
  72. 'glance',
  73. 'heat',
  74. 'horizon',
  75. 'iscsi',
  76. 'keystone',
  77. 'neutron',
  78. 'nova-',
  79. 'swift',
  80. ],
  81. help='Main images'),
  82. cfg.ListOpt('aux',
  83. default=[
  84. 'almanach',
  85. 'aodh',
  86. 'blazar',
  87. 'cloudkitty',
  88. 'congress',
  89. 'designate',
  90. 'dragonflow',
  91. 'ec2-api',
  92. 'freezer',
  93. 'gnocchi',
  94. 'influxdb',
  95. 'ironic',
  96. 'kafka',
  97. 'karbor',
  98. 'kuryr',
  99. 'magnum',
  100. 'manila',
  101. 'mistral',
  102. 'monasca',
  103. 'murano',
  104. 'novajoin',
  105. 'octavia',
  106. 'panko',
  107. 'rally',
  108. 'redis',
  109. 'sahara',
  110. 'searchlight',
  111. 'senlin',
  112. 'solum',
  113. 'tacker',
  114. 'telegraf',
  115. 'trove',
  116. 'vitrage',
  117. 'zaqar',
  118. 'zookeeper',
  119. 'zun',
  120. ],
  121. help='Aux Images'),
  122. cfg.ListOpt('default',
  123. default=[
  124. 'chrony',
  125. 'cron',
  126. 'kolla-toolbox',
  127. 'fluentd',
  128. 'glance',
  129. 'haproxy',
  130. 'heat',
  131. 'horizon',
  132. 'keepalived',
  133. 'keystone',
  134. 'mariadb',
  135. 'memcached',
  136. 'neutron',
  137. 'nova-',
  138. 'openvswitch',
  139. 'rabbitmq',
  140. ],
  141. help='Default images'),
  142. cfg.ListOpt('gate',
  143. default=[
  144. 'chrony',
  145. 'cron',
  146. 'fluentd',
  147. 'glance',
  148. 'haproxy',
  149. 'horizon',
  150. 'keepalived',
  151. 'keystone',
  152. 'kolla-toolbox',
  153. 'mariadb',
  154. 'memcached',
  155. 'neutron',
  156. 'nova-',
  157. 'openvswitch',
  158. 'rabbitmq',
  159. ],
  160. help='Gate images')
  161. ]
  162. hostarch = os.uname()[4]
  163. _CLI_OPTS = [
  164. cfg.StrOpt('base', short='b', default='centos',
  165. choices=BASE_OS_DISTRO,
  166. help='The distro type of the base image.'),
  167. cfg.StrOpt('base-tag', default='latest',
  168. help='The base distro image tag'),
  169. cfg.StrOpt('base-image',
  170. help='The base image name. Default is the same with base.'),
  171. cfg.StrOpt('base-arch', default=hostarch,
  172. choices=BASE_ARCH,
  173. help='The base architecture. Default is same as host'),
  174. cfg.BoolOpt('debug', short='d', default=False,
  175. help='Turn on debugging log level'),
  176. cfg.BoolOpt('skip-parents', default=False,
  177. help='Do not rebuild parents of matched images'),
  178. cfg.BoolOpt('skip-existing', default=False,
  179. help='Do not rebuild images present in the docker cache'),
  180. cfg.DictOpt('build-args',
  181. help='Set docker build time variables'),
  182. cfg.BoolOpt('keep', default=False,
  183. help='Keep failed intermediate containers'),
  184. cfg.BoolOpt('list-dependencies', short='l',
  185. help='Show image dependencies (filtering supported)'),
  186. cfg.BoolOpt('list-images',
  187. help='Show all available images (filtering supported)'),
  188. cfg.StrOpt('namespace', short='n', default='kolla',
  189. help='The Docker namespace name'),
  190. cfg.StrOpt('network_mode', default=None,
  191. help='The network mode for Docker build. Example: host'),
  192. cfg.BoolOpt('cache', default=True,
  193. help='Use the Docker cache when building'),
  194. cfg.MultiOpt('profile', types.String(), short='p',
  195. help=('Build a pre-defined set of images, see [profiles]'
  196. ' section in config. The default profiles are:'
  197. ' {}'.format(', '.join(
  198. [opt.name for opt in _PROFILE_OPTS])
  199. ))),
  200. cfg.BoolOpt('push', default=False,
  201. help='Push images after building'),
  202. cfg.IntOpt('push-threads', default=1, min=1,
  203. help=('The number of threads to user while pushing'
  204. ' Images. Note: Docker can not handle threading'
  205. ' push properly')),
  206. cfg.IntOpt('retries', short='r', default=3, min=0,
  207. help='The number of times to retry while building'),
  208. cfg.MultiOpt('regex', types.String(), positional=True,
  209. help=('Build only images matching regex and its'
  210. ' dependencies')),
  211. cfg.StrOpt('registry',
  212. help=('The docker registry host. The default registry host'
  213. ' is Docker Hub')),
  214. cfg.StrOpt('save-dependency',
  215. help=('Path to the file to store the docker image'
  216. ' dependency in Graphviz dot format')),
  217. cfg.StrOpt('format', short='f', default='json',
  218. choices=['json', 'none'],
  219. help='Format to write the final results in'),
  220. cfg.StrOpt('tarballs-base', default=TARBALLS_BASE,
  221. help='Base url to OpenStack tarballs'),
  222. cfg.StrOpt('type', short='t', default='binary',
  223. choices=INSTALL_TYPE_CHOICES,
  224. dest='install_type',
  225. help=('The method of the OpenStack install.')),
  226. cfg.IntOpt('threads', short='T', default=8, min=1,
  227. help=('The number of threads to use while building.'
  228. ' (Note: setting to one will allow real time'
  229. ' logging)')),
  230. cfg.StrOpt('tag', default=version.cached_version_string(),
  231. help='The Docker tag'),
  232. cfg.BoolOpt('template-only', default=False,
  233. help="Don't build images. Generate Dockerfile only"),
  234. cfg.IntOpt('timeout', default=120,
  235. help='Time in seconds after which any operation times out'),
  236. cfg.MultiOpt('template-override', types.String(),
  237. help='Path to template override file'),
  238. cfg.MultiOpt('docker-dir', types.String(),
  239. help='Path to additional docker file template directory',
  240. short='D', default=[]),
  241. cfg.StrOpt('logs-dir', help='Path to logs directory'),
  242. cfg.BoolOpt('pull', default=True,
  243. help='Attempt to pull a newer version of the base image'),
  244. cfg.StrOpt('work-dir', help=('Path to be used as working directory.'
  245. ' By default, a temporary dir is created')),
  246. cfg.BoolOpt('squash', default=False,
  247. help=('Squash the image layers. WARNING: it will consume lots'
  248. ' of disk IO. "docker-squash" tool is required, install'
  249. ' it by "pip install docker-squash"')),
  250. ]
  251. _BASE_OPTS = [
  252. cfg.StrOpt('maintainer',
  253. default='Kolla Project (https://launchpad.net/kolla)',
  254. help='Content of the maintainer label'),
  255. cfg.ListOpt('rpm_setup_config', default=[DELOREAN, DELOREAN_DEPS],
  256. help=('Comma separated list of .rpm or .repo file(s) '
  257. 'or URL(s) to install before building containers')),
  258. cfg.StrOpt('apt_sources_list', help=('Path to custom sources.list')),
  259. cfg.StrOpt('apt_preferences', help=('Path to custom apt/preferences')),
  260. cfg.BoolOpt('squash-cleanup', default=True,
  261. help='Remove source image from Docker after squashing'),
  262. cfg.StrOpt('squash-tmp-dir',
  263. help='Temporary directory to be used during squashing')
  264. ]
  265. SOURCES = {
  266. 'openstack-base': {
  267. 'type': 'url',
  268. 'location': ('$tarballs_base/requirements/'
  269. 'requirements-master.tar.gz')},
  270. 'almanach-base': {
  271. 'type': 'url',
  272. 'location': ('$tarballs_base/almanach/'
  273. 'almanach-master.tar.gz')},
  274. 'aodh-base': {
  275. 'type': 'url',
  276. 'location': ('$tarballs_base/aodh/'
  277. 'aodh-master.tar.gz')},
  278. 'barbican-base': {
  279. 'type': 'url',
  280. 'location': ('$tarballs_base/barbican/'
  281. 'barbican-master.tar.gz')},
  282. 'bifrost-base': {
  283. 'type': 'url',
  284. 'location': ('$tarballs_base/bifrost/'
  285. 'bifrost-master.tar.gz')},
  286. 'blazar-base': {
  287. 'type': 'url',
  288. 'location': ('$tarballs_base/blazar/'
  289. 'blazar-master.tar.gz')},
  290. 'ceilometer-base': {
  291. 'type': 'url',
  292. 'location': ('$tarballs_base/ceilometer/'
  293. 'ceilometer-master.tar.gz')},
  294. 'ceilometer-base-plugin-panko': {
  295. 'type': 'url',
  296. 'location': ('$tarballs_base/panko/'
  297. 'panko-master.tar.gz')},
  298. 'cinder-base': {
  299. 'type': 'url',
  300. 'location': ('$tarballs_base/cinder/'
  301. 'cinder-master.tar.gz')},
  302. 'congress-base': {
  303. 'type': 'url',
  304. 'location': ('$tarballs_base/congress/'
  305. 'congress-master.tar.gz')},
  306. 'cloudkitty-base': {
  307. 'type': 'url',
  308. 'location': ('$tarballs_base/cloudkitty/'
  309. 'cloudkitty-master.tar.gz')},
  310. 'designate-base': {
  311. 'type': 'url',
  312. 'location': ('$tarballs_base/designate/'
  313. 'designate-master.tar.gz')},
  314. 'dragonflow-base': {
  315. 'type': 'url',
  316. 'location': ('$tarballs_base/dragonflow/'
  317. 'dragonflow-master.tar.gz')},
  318. 'ec2-api': {
  319. 'type': 'url',
  320. 'location': ('$tarballs_base/ec2-api/'
  321. 'ec2-api-master.tar.gz')},
  322. 'freezer-api': {
  323. 'type': 'url',
  324. 'location': ('$tarballs_base/freezer-api/'
  325. 'freezer-api-master.tar.gz')},
  326. 'freezer-base': {
  327. 'type': 'url',
  328. 'location': ('$tarballs_base/freezer/'
  329. 'freezer-master.tar.gz')},
  330. 'glance-base': {
  331. 'type': 'url',
  332. 'location': ('$tarballs_base/glance/'
  333. 'glance-master.tar.gz')},
  334. 'gnocchi-base': {
  335. 'type': 'git',
  336. 'reference': 'master',
  337. 'location': ('https://github.com/gnocchixyz/'
  338. 'gnocchi.git')},
  339. 'heat-base': {
  340. 'type': 'url',
  341. 'location': ('$tarballs_base/heat/'
  342. 'heat-master.tar.gz')},
  343. 'horizon': {
  344. 'type': 'url',
  345. 'location': ('$tarballs_base/horizon/'
  346. 'horizon-master.tar.gz')},
  347. 'horizon-plugin-blazar-dashboard': {
  348. 'type': 'url',
  349. 'location': ('$tarballs_base/blazar-dashboard/'
  350. 'blazar-dashboard-master.tar.gz')},
  351. 'horizon-plugin-congress-dashboard': {
  352. 'type': 'url',
  353. 'location': ('$tarballs_base/congress-dashboard/'
  354. 'congress-dashboard-master.tar.gz')},
  355. 'horizon-plugin-cloudkitty-dashboard': {
  356. 'type': 'url',
  357. 'location': ('$tarballs_base/cloudkitty-dashboard/'
  358. 'cloudkitty-dashboard-master.tar.gz')},
  359. 'horizon-plugin-designate-dashboard': {
  360. 'type': 'url',
  361. 'location': ('$tarballs_base/designate-dashboard/'
  362. 'designate-dashboard-master.tar.gz')},
  363. 'horizon-plugin-fwaas-dashboard': {
  364. 'type': 'url',
  365. 'location': ('$tarballs_base/neutron-fwaas-dashboard/'
  366. 'neutron-fwaas-dashboard-master.tar.gz')},
  367. 'horizon-plugin-freezer-web-ui': {
  368. 'type': 'url',
  369. 'location': ('$tarballs_base/freezer-web-ui/'
  370. 'freezer-web-ui-master.tar.gz')},
  371. 'horizon-plugin-heat-dashboard': {
  372. 'type': 'url',
  373. 'location': ('$tarballs_base/heat-dashboard/'
  374. 'heat-dashboard-master.tar.gz')},
  375. 'horizon-plugin-ironic-ui': {
  376. 'type': 'url',
  377. 'location': ('$tarballs_base/ironic-ui/'
  378. 'ironic-ui-master.tar.gz')},
  379. 'horizon-plugin-karbor-dashboard': {
  380. 'type': 'url',
  381. 'location': ('$tarballs_base/karbor-dashboard/'
  382. 'karbor-dashboard-master.tar.gz')},
  383. 'horizon-plugin-magnum-ui': {
  384. 'type': 'url',
  385. 'location': ('$tarballs_base/magnum-ui/'
  386. 'magnum-ui-master.tar.gz')},
  387. 'horizon-plugin-manila-ui': {
  388. 'type': 'url',
  389. 'location': ('$tarballs_base/manila-ui/'
  390. 'manila-ui-master.tar.gz')},
  391. 'horizon-plugin-mistral-dashboard': {
  392. 'type': 'url',
  393. 'location': ('$tarballs_base/mistral-dashboard/'
  394. 'mistral-dashboard-master.tar.gz')},
  395. 'horizon-plugin-monasca-ui': {
  396. 'type': 'url',
  397. 'location': ('$tarballs_base/monasca-ui/'
  398. 'monasca-ui-master.tar.gz')},
  399. 'horizon-plugin-murano-dashboard': {
  400. 'type': 'url',
  401. 'location': ('$tarballs_base/murano-dashboard/'
  402. 'murano-dashboard-master.tar.gz')},
  403. 'horizon-plugin-neutron-lbaas-dashboard': {
  404. 'type': 'url',
  405. 'location': ('$tarballs_base/neutron-lbaas-dashboard/'
  406. 'neutron-lbaas-dashboard-master.tar.gz')},
  407. 'horizon-plugin-neutron-vpnaas-dashboard': {
  408. 'type': 'url',
  409. 'location': ('$tarballs_base/neutron-vpnaas-dashboard/'
  410. 'neutron-vpnaas-dashboard-master.tar.gz')},
  411. 'horizon-plugin-octavia-dashboard': {
  412. 'type': 'url',
  413. 'location': ('$tarballs_base/octavia-dashboard/'
  414. 'octavia-dashboard-master.tar.gz')},
  415. 'horizon-plugin-sahara-dashboard': {
  416. 'type': 'url',
  417. 'location': ('$tarballs_base/sahara-dashboard/'
  418. 'sahara-dashboard-master.tar.gz')},
  419. 'horizon-plugin-searchlight-ui': {
  420. 'type': 'url',
  421. 'location': ('$tarballs_base/searchlight-ui/'
  422. 'searchlight-ui-master.tar.gz')},
  423. 'horizon-plugin-senlin-dashboard': {
  424. 'type': 'url',
  425. 'location': ('$tarballs_base/senlin-dashboard/'
  426. 'senlin-dashboard-master.tar.gz')},
  427. 'horizon-plugin-solum-dashboard': {
  428. 'type': 'url',
  429. 'location': ('$tarballs_base/solum-dashboard/'
  430. 'solum-dashboard-master.tar.gz')},
  431. 'horizon-plugin-tacker-dashboard': {
  432. 'type': 'url',
  433. 'location': ('$tarballs_base/tacker-horizon/'
  434. 'tacker-horizon-master.tar.gz')},
  435. 'horizon-plugin-trove-dashboard': {
  436. 'type': 'url',
  437. 'location': ('$tarballs_base/trove-dashboard/'
  438. 'trove-dashboard-master.tar.gz')},
  439. 'horizon-plugin-vitrage-dashboard': {
  440. 'type': 'url',
  441. 'location': ('$tarballs_base/vitrage-dashboard/'
  442. 'vitrage-dashboard-master.tar.gz')},
  443. 'horizon-plugin-watcher-dashboard': {
  444. 'type': 'url',
  445. 'location': ('$tarballs_base/watcher-dashboard/'
  446. 'watcher-dashboard-master.tar.gz')},
  447. 'horizon-plugin-zaqar-ui': {
  448. 'type': 'url',
  449. 'location': ('$tarballs_base/zaqar-ui/'
  450. 'zaqar-ui-master.tar.gz')},
  451. 'horizon-plugin-zun-ui': {
  452. 'type': 'url',
  453. 'location': ('$tarballs_base/zun-ui/'
  454. 'zun-ui-master.tar.gz')},
  455. 'ironic-base': {
  456. 'type': 'url',
  457. 'location': ('$tarballs_base/ironic/'
  458. 'ironic-master.tar.gz')},
  459. 'ironic-inspector': {
  460. 'type': 'url',
  461. 'location': ('$tarballs_base/ironic-inspector/'
  462. 'ironic-inspector-master.tar.gz')},
  463. 'karbor-base': {
  464. 'type': 'url',
  465. 'location': ('$tarballs_base/karbor/'
  466. 'karbor-master.tar.gz')},
  467. 'keystone-base': {
  468. 'type': 'url',
  469. 'location': ('$tarballs_base/keystone/'
  470. 'keystone-master.tar.gz')},
  471. 'kuryr-base': {
  472. 'type': 'url',
  473. 'location': ('$tarballs_base/kuryr/'
  474. 'kuryr-master.tar.gz')},
  475. 'kuryr-libnetwork': {
  476. 'type': 'url',
  477. 'location': ('$tarballs_base/kuryr-libnetwork/'
  478. 'kuryr-libnetwork-master.tar.gz')},
  479. 'magnum-base': {
  480. 'type': 'url',
  481. 'location': ('$tarballs_base/magnum/'
  482. 'magnum-master.tar.gz')},
  483. 'manila-base': {
  484. 'type': 'url',
  485. 'location': ('$tarballs_base/manila/'
  486. 'manila-master.tar.gz')},
  487. 'mistral-base': {
  488. 'type': 'url',
  489. 'location': ('$tarballs_base/mistral/'
  490. 'mistral-master.tar.gz')},
  491. 'mistral-base-plugin-tacker': {
  492. 'type': 'url',
  493. 'location': ('$tarballs_base/tacker/'
  494. 'tacker-master.tar.gz')},
  495. 'monasca-agent': {
  496. 'type': 'url',
  497. 'location': ('$tarballs_base/monasca-agent/'
  498. 'monasca-agent-master.tar.gz')},
  499. 'monasca-api': {
  500. 'type': 'url',
  501. 'location': ('$tarballs_base/monasca-api/'
  502. 'monasca-api-master.tar.gz')},
  503. 'monasca-log-api': {
  504. 'type': 'url',
  505. 'location': ('$tarballs_base/monasca-log-api/'
  506. 'monasca-log-api-master.tar.gz')},
  507. 'monasca-notification': {
  508. 'type': 'url',
  509. 'location': ('$tarballs_base/monasca-notification/'
  510. 'monasca-notification-master.tar.gz')},
  511. 'monasca-persister': {
  512. 'type': 'url',
  513. 'location': ('$tarballs_base/monasca-persister/'
  514. 'monasca-persister-master.tar.gz')},
  515. 'monasca-statsd': {
  516. 'type': 'url',
  517. 'location': ('$tarballs_base/monasca-statsd/'
  518. 'monasca-statsd-master.tar.gz')},
  519. # FIXME(dszumski): Use openstack tar when infra is fixed
  520. 'monasca-thresh': {
  521. 'type': 'url',
  522. 'location': ('https://github.com/openstack/monasca-thresh/archive/'
  523. 'master.tar.gz')},
  524. 'monasca-thresh-additions-monasca-common': {
  525. 'type': 'url',
  526. 'location': ('$tarballs_base/monasca-common/'
  527. 'monasca-common-master.tar.gz')},
  528. 'murano-base': {
  529. 'type': 'url',
  530. 'location': ('$tarballs_base/murano/'
  531. 'murano-master.tar.gz')},
  532. 'neutron-base': {
  533. 'type': 'url',
  534. 'location': ('$tarballs_base/neutron/'
  535. 'neutron-master.tar.gz')},
  536. 'neutron-base-plugin-neutron-fwaas': {
  537. 'type': 'url',
  538. 'location': ('$tarballs_base/neutron-fwaas/'
  539. 'neutron-fwaas-master.tar.gz')},
  540. 'neutron-base-plugin-networking-ansible': {
  541. 'type': 'url',
  542. 'location': ('$tarballs_base/networking-ansible/'
  543. 'networking-ansible-master.tar.gz')},
  544. 'neutron-base-plugin-networking-baremetal': {
  545. 'type': 'url',
  546. 'location': ('$tarballs_base/networking-baremetal/'
  547. 'networking-baremetal-master.tar.gz')},
  548. 'neutron-base-plugin-networking-generic-switch': {
  549. 'type': 'url',
  550. 'location': ('$tarballs_base/networking-generic-switch/'
  551. 'networking-generic-switch-master.tar.gz')},
  552. 'neutron-base-plugin-networking-sfc': {
  553. 'type': 'url',
  554. 'location': ('$tarballs_base/networking-sfc/'
  555. 'networking-sfc-master.tar.gz')},
  556. 'neutron-base-plugin-vmware-nsx': {
  557. 'type': 'url',
  558. 'location': ('$tarballs_base/vmware-nsx/'
  559. 'vmware-nsx-master.tar.gz')},
  560. 'neutron-base-plugin-vpnaas-agent': {
  561. 'type': 'url',
  562. 'location': ('$tarballs_base/neutron-vpnaas/'
  563. 'neutron-vpnaas-master.tar.gz')},
  564. 'neutron-bgp-dragent': {
  565. 'type': 'url',
  566. 'location': ('$tarballs_base/neutron-dynamic-routing/'
  567. 'neutron-dynamic-routing-master.tar.gz')},
  568. 'neutron-lbaas-agent': {
  569. 'type': 'url',
  570. 'location': ('$tarballs_base/neutron-lbaas/'
  571. 'neutron-lbaas-master.tar.gz')},
  572. 'neutron-server-opendaylight-plugin-ceilometer': {
  573. 'type': 'url',
  574. 'location': ('$tarballs_base/ceilometer/'
  575. 'ceilometer-master.tar.gz')},
  576. 'neutron-server-opendaylight-plugin-networking-odl': {
  577. 'type': 'url',
  578. 'location': ('$tarballs_base/networking-odl/'
  579. 'networking-odl-master.tar.gz')},
  580. 'neutron-server-opendaylight-plugin-networking-bgpvpn': {
  581. 'type': 'url',
  582. 'location': ('$tarballs_base/networking-bgpvpn/'
  583. 'networking-bgpvpn-master.tar.gz')},
  584. 'neutron-server-opendaylight-plugin-networking-l2gw': {
  585. 'type': 'url',
  586. 'location': ('$tarballs_base/networking-l2gw/'
  587. 'networking-l2gw-master.tar.gz')},
  588. 'neutron-server-opendaylight-plugin-networking-sfc': {
  589. 'type': 'url',
  590. 'location': ('$tarballs_base/networking-sfc/'
  591. 'networking-sfc-master.tar.gz')},
  592. 'neutron-server-plugin-networking-infoblox': {
  593. 'type': 'url',
  594. 'location': ('$tarballs_base/networking-infoblox/'
  595. 'networking-infoblox-master.tar.gz')},
  596. 'neutron-server-plugin-neutron-dynamic-routing': {
  597. 'type': 'url',
  598. 'location': ('$tarballs_base/neutron-dynamic-routing/'
  599. 'neutron-dynamic-routing-master.tar.gz')},
  600. 'neutron-server-plugin-neutron-lbaas': {
  601. 'type': 'url',
  602. 'location': ('$tarballs_base/neutron-lbaas/'
  603. 'neutron-lbaas-master.tar.gz')},
  604. 'neutron-server-plugin-vmware-nsxlib': {
  605. 'type': 'url',
  606. 'location': ('$tarballs_base/vmware-nsxlib/'
  607. 'vmware-nsxlib-master.tar.gz')},
  608. 'neutron-vpnaas-agent': {
  609. 'type': 'url',
  610. 'location': ('$tarballs_base/neutron-vpnaas/'
  611. 'neutron-vpnaas-master.tar.gz')},
  612. 'neutron-server-ovn-plugin-networking-ovn': {
  613. 'type': 'url',
  614. 'location': ('$tarballs_base/networking-ovn/'
  615. 'networking-ovn-master.tar.gz')},
  616. 'neutron-metadata-agent-ovn-plugin-networking-ovn': {
  617. 'type': 'url',
  618. 'location': ('$tarballs_base/networking-ovn/'
  619. 'networking-ovn-master.tar.gz')},
  620. 'nova-base': {
  621. 'type': 'url',
  622. 'location': ('$tarballs_base/nova/'
  623. 'nova-master.tar.gz')},
  624. 'nova-base-plugin-blazar': {
  625. 'type': 'url',
  626. 'location': ('$tarballs_base/blazar-nova/'
  627. 'blazar-nova-master.tar.gz')},
  628. 'nova-base-plugin-mksproxy': {
  629. 'type': 'url',
  630. 'location': ('$tarballs_base/nova-mksproxy/'
  631. 'nova-mksproxy-master.tar.gz')},
  632. 'novajoin-base': {
  633. 'type': 'url',
  634. 'location': ('$tarballs_base/novajoin/'
  635. 'novajoin-master.tar.gz')},
  636. 'octavia-base': {
  637. 'type': 'url',
  638. 'location': ('$tarballs_base/octavia/'
  639. 'octavia-master.tar.gz')},
  640. 'panko-base': {
  641. 'type': 'url',
  642. 'location': ('$tarballs_base/panko/'
  643. 'panko-master.tar.gz')},
  644. 'tempest-plugin-tempest-conf': {
  645. 'type': 'url',
  646. 'location': ('$tarballs_base/python-tempestconf/'
  647. 'python-tempestconf-master.tar.gz')},
  648. 'tempest-plugin-barbican': {
  649. 'type': 'url',
  650. 'location': ('$tarballs_base/barbican-tempest-plugin/'
  651. 'barbican-tempest-plugin-master.tar.gz')},
  652. 'tempest-plugin-blazar': {
  653. 'type': 'url',
  654. 'location': ('$tarballs_base/blazar-tempest-plugin/'
  655. 'blazar-tempest-plugin-master.tar.gz')},
  656. 'tempest-plugin-cinder': {
  657. 'type': 'url',
  658. 'location': ('$tarballs_base/cinder-tempest-plugin/'
  659. 'cinder-tempest-plugin-master.tar.gz')},
  660. 'tempest-plugin-congress': {
  661. 'type': 'url',
  662. 'location': ('$tarballs_base/congress-tempest-plugin/'
  663. 'congress-tempest-plugin-master.tar.gz')},
  664. 'tempest-plugin-ec2api': {
  665. 'type': 'url',
  666. 'location': ('$tarballs_base/ec2api-tempest-plugin/'
  667. 'ec2api-tempest-plugin-master.tar.gz')},
  668. 'tempest-plugin-heat': {
  669. 'type': 'url',
  670. 'location': ('$tarballs_base/heat-tempest-plugin/'
  671. 'heat-tempest-plugin-master.tar.gz')},
  672. 'tempest-plugin-ironic': {
  673. 'type': 'url',
  674. 'location': ('$tarballs_base/ironic-tempest-plugin/'
  675. 'ironic-tempest-plugin-master.tar.gz')},
  676. 'tempest-plugin-keystone': {
  677. 'type': 'url',
  678. 'location': ('$tarballs_base/keystone-tempest-plugin/'
  679. 'keystone-tempest-plugin-master.tar.gz')},
  680. 'tempest-plugin-magnum': {
  681. 'type': 'url',
  682. 'location': ('$tarballs_base/magnum-tempest-plugin/'
  683. 'magnum-tempest-plugin-master.tar.gz')},
  684. 'tempest-plugin-manila': {
  685. 'type': 'url',
  686. 'location': ('$tarballs_base/manila-tempest-plugin/'
  687. 'manila-tempest-plugin-master.tar.gz')},
  688. 'tempest-plugin-mistral': {
  689. 'type': 'url',
  690. 'location': ('$tarballs_base/mistral-tempest-plugin/'
  691. 'mistral-tempest-plugin-master.tar.gz')},
  692. 'tempest-plugin-monasca': {
  693. 'type': 'url',
  694. 'location': ('$tarballs_base/monasca-tempest-plugin/'
  695. 'monasca-tempest-plugin-master.tar.gz')},
  696. 'tempest-plugin-murano': {
  697. 'type': 'url',
  698. 'location': ('$tarballs_base/murano-tempest-plugin/'
  699. 'murano-tempest-plugin-master.tar.gz')},
  700. 'tempest-plugin-neutron': {
  701. 'type': 'url',
  702. 'location': ('$tarballs_base/neutron-tempest-plugin/'
  703. 'neutron-tempest-plugin-master.tar.gz')},
  704. 'tempest-plugin-patrole': {
  705. 'type': 'url',
  706. 'location': ('$tarballs_base/patrole/'
  707. 'patrole-master.tar.gz')},
  708. 'tempest-plugin-telemetry': {
  709. 'type': 'url',
  710. 'location': ('$tarballs_base/telemetry-tempest-plugin/'
  711. 'telemetry-tempest-plugin-master.tar.gz')},
  712. 'tempest-plugin-tripleo-common': {
  713. 'type': 'url',
  714. 'location': ('$tarballs_base/tripleo-common-tempest-plugin/'
  715. 'tripleo-common-tempest-plugin-master.tar.gz')},
  716. 'tempest-plugin-trove': {
  717. 'type': 'url',
  718. 'location': ('$tarballs_base/trove-tempest-plugin/'
  719. 'trove-tempest-plugin-master.tar.gz')},
  720. 'tempest-plugin-vitrage': {
  721. 'type': 'url',
  722. 'location': ('$tarballs_base/vitrage-tempest-plugin/'
  723. 'vitrage-tempest-plugin-master.tar.gz')},
  724. 'tempest-plugin-watcher': {
  725. 'type': 'url',
  726. 'location': ('$tarballs_base/watcher-tempest-plugin/'
  727. 'watcher-tempest-plugin-master.tar.gz')},
  728. 'tempest-plugin-zaqar': {
  729. 'type': 'url',
  730. 'location': ('$tarballs_base/zaqar-tempest-plugin/'
  731. 'zaqar-tempest-plugin-master.tar.gz')},
  732. 'rally': {
  733. 'type': 'url',
  734. 'location': ('$tarballs_base/rally/'
  735. 'rally-master.tar.gz')},
  736. 'sahara-base': {
  737. 'type': 'url',
  738. 'location': ('$tarballs_base/sahara/'
  739. 'sahara-master.tar.gz')},
  740. 'searchlight-base': {
  741. 'type': 'url',
  742. 'location': ('$tarballs_base/searchlight/'
  743. 'searchlight-master.tar.gz')},
  744. 'senlin-base': {
  745. 'type': 'url',
  746. 'location': ('$tarballs_base/senlin/'
  747. 'senlin-master.tar.gz')},
  748. 'solum-base': {
  749. 'type': 'url',
  750. 'location': ('$tarballs_base/solum/'
  751. 'solum-master.tar.gz')},
  752. 'swift-base': {
  753. 'type': 'url',
  754. 'location': ('$tarballs_base/swift/'
  755. 'swift-master.tar.gz')},
  756. 'tacker-base': {
  757. 'type': 'url',
  758. 'location': ('$tarballs_base/tacker/'
  759. 'tacker-master.tar.gz')},
  760. 'tacker-base-plugin-networking-sfc': {
  761. 'type': 'url',
  762. 'location': ('$tarballs_base/networking-sfc/'
  763. 'networking-sfc-master.tar.gz')},
  764. 'tempest': {
  765. 'type': 'url',
  766. 'location': ('$tarballs_base/tempest/'
  767. 'tempest-master.tar.gz')},
  768. 'tripleo-ui': {
  769. 'type': 'url',
  770. 'location': ('$tarballs_base/tripleo-ui/'
  771. 'tripleo-ui-latest.tar.gz')},
  772. 'trove-base': {
  773. 'type': 'url',
  774. 'location': ('$tarballs_base/trove/'
  775. 'trove-master.tar.gz')},
  776. 'vitrage-base': {
  777. 'type': 'url',
  778. 'location': ('$tarballs_base/vitrage/'
  779. 'vitrage-master.tar.gz')},
  780. 'vmtp': {
  781. 'type': 'url',
  782. 'location': ('$tarballs_base/vmtp/'
  783. 'vmtp-master.tar.gz')},
  784. 'watcher-base': {
  785. 'type': 'url',
  786. 'location': ('$tarballs_base/watcher/'
  787. 'watcher-master.tar.gz')},
  788. 'zaqar': {
  789. 'type': 'url',
  790. 'location': ('$tarballs_base/zaqar/'
  791. 'zaqar-master.tar.gz')},
  792. 'zun-base': {
  793. 'type': 'url',
  794. 'location': ('$tarballs_base/zun/'
  795. 'zun-master.tar.gz')}
  796. }
  797. # NOTE(SamYaple): Only increment the UID. Never reuse old or removed UIDs.
  798. # Starting point 42400+ was chosen arbitrarily to ensure no conflicts
  799. USERS = {
  800. 'kolla-user': {
  801. 'uid': 42400,
  802. 'gid': 42400,
  803. },
  804. 'ansible-user': {
  805. 'uid': 42401,
  806. 'gid': 42401,
  807. },
  808. 'aodh-user': {
  809. 'uid': 42402,
  810. 'gid': 42402,
  811. },
  812. 'barbican-user': {
  813. 'uid': 42403,
  814. 'gid': 42403,
  815. },
  816. 'bifrost-user': {
  817. 'uid': 42404,
  818. 'gid': 42404,
  819. },
  820. 'ceilometer-user': {
  821. 'uid': 42405,
  822. 'gid': 42405,
  823. },
  824. 'chrony-user': {
  825. 'uid': 42406,
  826. 'gid': 42406,
  827. },
  828. 'cinder-user': {
  829. 'uid': 42407,
  830. 'gid': 42407,
  831. },
  832. 'cloudkitty-user': {
  833. 'uid': 42408,
  834. 'gid': 42408,
  835. },
  836. 'collectd-user': {
  837. 'uid': 42409,
  838. 'gid': 42409,
  839. },
  840. 'congress-user': {
  841. 'uid': 42410,
  842. 'gid': 42410,
  843. },
  844. 'designate-user': {
  845. 'uid': 42411,
  846. 'gid': 42411,
  847. },
  848. 'elasticsearch-user': {
  849. 'uid': 42412,
  850. 'gid': 42412,
  851. },
  852. 'etcd-user': {
  853. 'uid': 42413,
  854. 'gid': 42413,
  855. },
  856. 'freezer-user': {
  857. 'uid': 42414,
  858. 'gid': 42414,
  859. },
  860. 'glance-user': {
  861. 'uid': 42415,
  862. 'gid': 42415,
  863. },
  864. 'gnocchi-user': {
  865. 'uid': 42416,
  866. 'gid': 42416,
  867. },
  868. 'grafana-user': {
  869. 'uid': 42417,
  870. 'gid': 42417,
  871. },
  872. 'heat-user': {
  873. 'uid': 42418,
  874. 'gid': 42418,
  875. },
  876. 'horizon-user': {
  877. 'uid': 42420,
  878. 'gid': 42420,
  879. },
  880. 'influxdb-user': {
  881. 'uid': 42421,
  882. 'gid': 42421,
  883. },
  884. 'ironic-user': {
  885. 'uid': 42422,
  886. 'gid': 42422,
  887. },
  888. 'kafka-user': {
  889. 'uid': 42423,
  890. 'gid': 42423,
  891. },
  892. 'keystone-user': {
  893. 'uid': 42425,
  894. 'gid': 42425,
  895. },
  896. 'kibana-user': {
  897. 'uid': 42426,
  898. 'gid': 42426,
  899. },
  900. 'qemu-user': {
  901. 'uid': 42427,
  902. 'gid': 42427,
  903. },
  904. 'magnum-user': {
  905. 'uid': 42428,
  906. 'gid': 42428,
  907. },
  908. 'manila-user': {
  909. 'uid': 42429,
  910. 'gid': 42429,
  911. },
  912. 'mistral-user': {
  913. 'uid': 42430,
  914. 'gid': 42430,
  915. },
  916. 'monasca-user': {
  917. 'uid': 42431,
  918. 'gid': 42431,
  919. },
  920. 'mongodb-user': {
  921. 'uid': 42432,
  922. 'gid': 65534,
  923. },
  924. 'murano-user': {
  925. 'uid': 42433,
  926. 'gid': 42433,
  927. },
  928. 'mysql-user': {
  929. 'uid': 42434,
  930. 'gid': 42434,
  931. },
  932. 'neutron-user': {
  933. 'uid': 42435,
  934. 'gid': 42435,
  935. },
  936. 'nova-user': {
  937. 'uid': 42436,
  938. 'gid': 42436,
  939. },
  940. 'octavia-user': {
  941. 'uid': 42437,
  942. 'gid': 42437,
  943. },
  944. 'panko-user': {
  945. 'uid': 42438,
  946. 'gid': 42438,
  947. },
  948. 'rabbitmq-user': {
  949. 'uid': 42439,
  950. 'gid': 42439,
  951. },
  952. 'rally-user': {
  953. 'uid': 42440,
  954. 'gid': 42440,
  955. },
  956. 'sahara-user': {
  957. 'uid': 42441,
  958. 'gid': 42441,
  959. },
  960. 'searchlight-user': {
  961. 'uid': 42442,
  962. 'gid': 42442,
  963. },
  964. 'senlin-user': {
  965. 'uid': 42443,
  966. 'gid': 42443,
  967. },
  968. 'solum-user': {
  969. 'uid': 42444,
  970. 'gid': 42444,
  971. },
  972. 'swift-user': {
  973. 'uid': 42445,
  974. 'gid': 42445,
  975. },
  976. 'tacker-user': {
  977. 'uid': 42446,
  978. 'gid': 42446,
  979. },
  980. 'td-agent-user': {
  981. 'uid': 42447,
  982. 'gid': 42447,
  983. },
  984. 'telegraf-user': {
  985. 'uid': 42448,
  986. 'gid': 42448,
  987. },
  988. 'trove-user': {
  989. 'uid': 42449,
  990. 'gid': 42449,
  991. },
  992. 'vmtp-user': {
  993. 'uid': 42450,
  994. 'gid': 42450,
  995. },
  996. 'watcher-user': {
  997. 'uid': 42451,
  998. 'gid': 42451,
  999. },
  1000. 'zaqar-user': {
  1001. 'uid': 42452,
  1002. 'gid': 42452,
  1003. },
  1004. 'zookeeper-user': {
  1005. 'uid': 42453,
  1006. 'gid': 42453,
  1007. },
  1008. 'haproxy-user': {
  1009. 'uid': 42454,
  1010. 'gid': 42454,
  1011. },
  1012. 'ceph-user': {
  1013. 'uid': 64045,
  1014. 'gid': 64045,
  1015. },
  1016. 'memcached-user': {
  1017. 'uid': 42457,
  1018. 'gid': 42457,
  1019. },
  1020. 'karbor-user': {
  1021. 'uid': 42458,
  1022. 'gid': 42458,
  1023. },
  1024. 'vitrage-user': {
  1025. 'uid': 42459,
  1026. 'gid': 42459,
  1027. },
  1028. 'redis-user': {
  1029. 'uid': 42460,
  1030. 'gid': 42460,
  1031. },
  1032. 'ironic-inspector-user': {
  1033. 'uid': 42461,
  1034. 'gid': 42461,
  1035. },
  1036. 'odl-user': {
  1037. 'uid': 42462,
  1038. 'gid': 42462,
  1039. },
  1040. 'zun-user': {
  1041. 'uid': 42463,
  1042. 'gid': 42463,
  1043. },
  1044. 'dragonflow-user': {
  1045. 'uid': 42464,
  1046. 'gid': 42464,
  1047. },
  1048. 'qdrouterd-user': {
  1049. 'uid': 42465,
  1050. 'gid': 42465,
  1051. },
  1052. 'ec2api-user': {
  1053. 'uid': 42466,
  1054. 'gid': 42466,
  1055. },
  1056. 'sensu-user': {
  1057. 'uid': 42467,
  1058. 'gid': 42467,
  1059. },
  1060. 'skydive-user': {
  1061. 'uid': 42468,
  1062. 'gid': 42468,
  1063. },
  1064. 'kuryr-user': {
  1065. 'uid': 42469,
  1066. 'gid': 42469,
  1067. },
  1068. 'novajoin-user': {
  1069. 'uid': 42470,
  1070. 'gid': 42470,
  1071. },
  1072. 'blazar-user': {
  1073. 'uid': 42471,
  1074. 'gid': 42471,
  1075. },
  1076. 'prometheus-user': {
  1077. 'uid': 42472,
  1078. 'gid': 42472,
  1079. },
  1080. 'libvirt-user': {
  1081. 'uid': 42473, # unused user, but we need the group for socket access
  1082. 'gid': 42473,
  1083. },
  1084. 'fluentd-user': {
  1085. 'uid': 42474,
  1086. 'gid': 42474,
  1087. },
  1088. 'almanach-user': {
  1089. 'uid': 42475,
  1090. 'gid': 42475,
  1091. },
  1092. 'openvswitch-user': {
  1093. 'uid': 42476, # unused user
  1094. 'gid': 42476,
  1095. },
  1096. 'hugetlbfs-user': {
  1097. 'uid': 42477, # unused user, but we need the group for vhost socket
  1098. 'gid': 42477,
  1099. },
  1100. 'logstash-user': {
  1101. 'uid': 42478,
  1102. 'gid': 42478,
  1103. },
  1104. 'storm-user': {
  1105. 'uid': 42479,
  1106. 'gid': 42479,
  1107. },
  1108. 'tempest-user': {
  1109. 'uid': 42480,
  1110. 'gid': 42480,
  1111. }
  1112. }
  1113. def get_source_opts(type_=None, location=None, reference=None):
  1114. return [cfg.StrOpt('type', choices=['local', 'git', 'url'],
  1115. default=type_,
  1116. help='Source location type'),
  1117. cfg.StrOpt('location', default=location,
  1118. help='The location for source install'),
  1119. cfg.StrOpt('reference', default=reference,
  1120. help=('Git reference to pull, commit sha, tag '
  1121. 'or branch name'))]
  1122. def get_user_opts(uid, gid):
  1123. return [
  1124. cfg.IntOpt('uid', default=uid, help='The user id'),
  1125. cfg.IntOpt('gid', default=gid, help='The group id'),
  1126. ]
  1127. def gen_all_user_opts():
  1128. for name, params in USERS.items():
  1129. uid = params['uid']
  1130. gid = params['gid']
  1131. yield name, get_user_opts(uid, gid)
  1132. def gen_all_source_opts():
  1133. for name, params in SOURCES.items():
  1134. type_ = params['type']
  1135. location = params['location']
  1136. reference = params.get('reference')
  1137. yield name, get_source_opts(type_, location, reference)
  1138. def list_opts():
  1139. return itertools.chain([(None, _CLI_OPTS),
  1140. (None, _BASE_OPTS),
  1141. ('profiles', _PROFILE_OPTS)],
  1142. gen_all_source_opts(),
  1143. gen_all_user_opts(),
  1144. )
  1145. def parse(conf, args, usage=None, prog=None,
  1146. default_config_files=None):
  1147. conf.register_cli_opts(_CLI_OPTS)
  1148. conf.register_opts(_BASE_OPTS)
  1149. conf.register_opts(_PROFILE_OPTS, group='profiles')
  1150. for name, opts in gen_all_source_opts():
  1151. conf.register_opts(opts, name)
  1152. for name, opts in gen_all_user_opts():
  1153. conf.register_opts(opts, name)
  1154. conf(args=args,
  1155. project='kolla',
  1156. usage=usage,
  1157. prog=prog,
  1158. version=version.cached_version_string(),
  1159. default_config_files=default_config_files)
  1160. # NOTE(jeffrey4l): set the default base tag based on the
  1161. # base option
  1162. conf.set_default('base_tag', DEFAULT_BASE_TAGS.get(conf.base))
  1163. if not conf.base_image:
  1164. conf.base_image = conf.base