Skip to content

sync: menu catalog seeding, nginx startup fixes, env var namespacing, image bumps (iam 0.6.3 / web-console 0.6.5) - #200

Merged
MZC-CSC merged 38 commits into
m-cmp:mainfrom
MZC-CSC:develop
Sep 24, 2026
Merged

MZC-CSC merged 38 commits into
m-cmp:mainfrom
MZC-CSC:develop

Conversation

@MZC-CSC

@MZC-CSC MZC-CSC commented Sep 19, 2026

Copy link
Copy Markdown
Member

Syncs 22 commits accumulated on MZC-CSC:develop since #192. Groups below are ordered by impact.

Menu catalog seeding

The menu catalog is now seeded from a bundled copy rather than fetched from a raw GitHub URL at install time.

  • conf/docker/conf/mc-web-console/api/conf/webconsole_menu_resources.yaml is mounted read-only into mc-iam-manager and read once at first install. Later menu edits live in the IAM database; re-seeding requires an explicit force.
  • MC_WEB_CONSOLE_MENUYAML now defaults to that bundled path. The previous raw URL is kept commented out for anyone who wants remote seeding.
  • Removes the redundant client-side menu permission seeding step — permission seeding is chained into menu registration on the IAM side.
  • Deletes conf/docker/menu.yaml (417 lines) and the dead selfiammenu.yaml copy; adds a local menu resource yaml for self mode (USE_IAM=false).
  • Syncs mc-infra-manager / mc-iam-manager serviceActions from the canonical mc-web-console api.yaml.

This removes the install-time dependency on raw.githubusercontent.com and keeps the console and IAM menu definitions from drifting apart.

nginx startup deadlock on clean install

A clean install could deadlock or crash-loop because mc-iam-manager and mc-iam-manager-nginx waited on each other.

  • Drop the mc-iam-managermc-iam-manager-nginx dependency and start nginx explicitly in wave 1 of installAll.sh.
  • Resolve upstream hosts at request time in nginx.template.conf, so nginx no longer fails to start when an upstream container is not yet up.
  • Add a healthcheck to mc-iam-manager-nginx.
  • Fix unsubstituted variables in the nginx presets: MC_IAM_MANAGER_DOMAIN (prod) and MC_OBSERVABILITY_FRONT_PORT (local).

Environment variable namespacing

Several host-side variables had no framework prefix and could be shadowed by the host environment during compose interpolation. Most notably UID, which is a reserved shell variable and would silently leak into the mc-data-manager volume chown.

  • UID / GIDMC_DATA_MANAGER_UID / MC_DATA_MANAGER_GID
  • GRAFANA_API_KEYMC_OBSERVABILITY_GRAFANA_API_KEY
  • OPENAI_API_KEYMC_OBSERVABILITY_OPENAI_API_KEY
  • OLLAMA_BASE_URLMC_OBSERVABILITY_OLLAMA_BASE_URL

The container-side keys are unchanged; docker-compose.yaml maps the prefixed host variables onto them.

Other fixes

  • Pass spider auth credentials (TB_SPIDER_USERNAME / TB_SPIDER_PASSWORD) to mc-infra-manager, which previously failed to authenticate against mc-infra-connector.
  • Register the mc-web-console-front service URL in post-init.
  • Add a Version flag to the CLI root command (src/cmd/root.go).
  • Fix a verbose-log call that concatenated its arguments into the format string instead of passing them.
  • Sync api.yaml version stamps for mc-infra-manager / mc-infra-connector to 0.13.2 and drop the dead K8s remote-cmd / file-transfer operations.

Image bumps

Image Before After
cloudbaristaorg/mc-iam-manager 0.6.2 0.6.3
cloudbaristaorg/mc-web-console-api 0.6.2 0.6.5
cloudbaristaorg/mc-web-console-front 0.6.2 0.6.5

No other image tags are touched by this PR — main is already ahead of develop on cb-spider, cb-tumblebug, cost-optimizer, observability, application-manager and workflow-manager, and those lines are left as they are on main.

Docs

  • Updates docs/running-on-instance.md and fixes broken README links.
  • Documents the menu catalog and role-menu permission seeding in Step 5 (d).

yh-noh and others added 30 commits August 11, 2026 09:52
GRAFANA_API_KEY, OPENAI_API_KEY, OLLAMA_BASE_URL and UID/GID were read
straight from the host environment, so any same-named variable on the
operator's shell leaked into the containers (UID is even a bash builtin,
so it always leaked). Rename the host-side variables to
MC_OBSERVABILITY_*/MC_DATA_MANAGER_* and map them onto the env keys the
images actually read, which stay unchanged. MODE and DEFAULT_LANGUAGE
were confirmed dead (no consumer) and are left for a separate cleanup.
… format string

fmt.Printf was called with the value concatenated onto the format
string, so the %s verb was never filled and any % in the data was
misinterpreted. This also failed go vet (non-constant format string),
blocking the feature gate for every change in the repository.
The latest console menu schema defaults framework_service to
mc-web-console-front, so iframe menus resolve their host from the
service URL registry under that name. The post-init script never
registered it, leaving every iframe menu with 'service URL not found'
on a fresh install. Register the internal URL and update it to the
public front URL alongside the other -fe entries.

The post-init container only loads conf/mc-iam-manager/.env, so the
front port/public host are added to that env template (same convention
as the other iframe proxy entries) with a script-side fallback.
…rvice

fix(setup): register mc-web-console-front service URL in post-init
fix(env): namespace host-side variables that lacked a framework prefix
mc-iam-manager가 이제 메뉴 등록(POST /api/setup/initial-menus) 내부에서
역할-메뉴 권한 시딩까지 서버 측에서 체이닝하므로, 설치 스크립트가 별도로
initial-role-menu-permission-yaml을 호출할 필요가 없어졌다.

1_setup_auto.sh의 auto_setup()에서 Step 4-1(init_menu_permissions 호출)을
제거해 설치 흐름을 11단계로 축소했다. init_menu_permissions() 함수 자체는
수동 재시딩용으로 유지한다.

1_setup_manual.sh의 옵션 4)도 init_menu 단독 호출로 축소했다. 독립
옵션 4a)(권한만 재시딩)는 escape hatch로 그대로 유지한다.

README.md/README_kr.md의 설치 스텝 수 안내("8-step"/"8단계")가 이미
실제 스텝 수와 어긋나 있던 기존 드리프트를 11로 맞춰 함께 정정했다
(이번 변경으로 인한 회귀가 아니라 기존 문서 드리프트 수정).
feat: add local menu resource yaml for self mode (USE_IAM=false)
fix: drop redundant client-side menu permission seeding step
chore: remove dead selfiammenu.yaml copy from mc-web-console conf
mc-infra-manager(tumblebug)가 mc-infra-connector(spider)를 호출할 때
TB_SPIDER_USERNAME/TB_SPIDER_PASSWORD가 설정되지 않아 spider REST API
호출이 401로 실패하던 문제. mc-infra-connector에 이미 쓰이고 있는
MC_INFRA_CONNECTOR_API_USERNAME/PASSWORD를 그대로 재사용해 매핑을 추가.
fix: docker-compose.yaml 에 mc-infra-manager param 매핑 보완
… to 0.13.2 and drop dead K8s remote-cmd/file-transfer operations

ADMINCLI-TECH-013
- docs/running-on-instance.md 전면 재작성: 이미 삭제된 mc-iam-manager 개별
  init 스크립트(initauto.sh/add_demo_user.sh) 흐름을 현재 installAll.sh
  흐름(clone → .env.setup 복사 → installAll.sh → mcc infra info)으로 교체,
  옛 파일명/env변수 표기/포트(5005)/버전 핀/기본 계정 정정
- README.md:20 안내 링크 수정 (mc-admin-cli-infra.md → running-on-instance.md,
  잘못된 문서를 가리키고 있었음)

WIP: README.md Step 5 (d) "11-step setup" 항목에 메뉴 카탈로그 등록·
role-menu 권한 시딩이 포함된다는 설명 보강은 아직 미완료
The 11-step setup verification section explained how to check the
post-initial logs but never said what the steps actually register.
Note that Step 4 registers the menu catalog and seeds role-menu
permissions in one chained server-side call.
docs: running-on-instance.md 현행화 + README 현행화
./mcc --version has never worked - Cobra only registers --version
when the root command's Version field is set, and it wasn't, so the
flag simply didn't exist (docs telling users to run it as a smoke
test always failed with "unknown flag").

Pull the version from the VCS info Go embeds automatically for any
build done inside a git checkout (default since Go 1.18, no ldflags
or build script changes needed) - the short commit hash, plus
"-dirty" if the working tree had uncommitted changes at build time.
Falls back to "dev" when build info isn't available (e.g. go run).
feat(cli): mcc --version command 보완
…32-sync

fix: sync mc-infra-manager api.yaml version stamps to 0.13.2, drop dead K8s ops
…console canonical api.yaml

mc-admin-cli's bundled conf/docker/conf/mc-web-console/api/conf/api.yaml (mounted
into the running mc-web-console-api container) had fallen drastically behind
mc-web-console's own conf/api.yaml for the mc-infra-manager service: only 195 of
339 operations were present, missing commonly-used ones like CreateVNet, DeleteVNet,
GetAllInfra, PostInfra, PutSecurityGroup, etc. This caused live 404s (confirmed:
CreateVNet). mc-iam-manager's serviceActions registry fallback could not rescue
these calls either, since it only knows cb-tumblebug's raw swagger operationIds
(e.g. PostVNet), not mc-web-console's curated aliases (e.g. CreateVNet).

mc-iam-manager block was also stale (133 vs 140 ops) and synced in the same pass.
Other services (mc-infra-connector, mc-web-console, mc-observability,
mc-application-manager, mc-workflow-manager, mc-cost-optimizer, mc-data-manager)
were already within 0-1 operations of current and left untouched.

Only the serviceActions.mc-infra-manager / serviceActions.mc-iam-manager blocks
were replaced; the services.* section (deployment-specific baseurl/auth) is
unchanged.

Verified: POST /api/mc-infra-manager/CreateVNet now resolves and reaches the
tumblebug backend (previously a routing 404) against the local v0.13.2 stack.

ADMINCLI-TECH-016
…erviceactions-sync

fix: sync mc-infra-manager/mc-iam-manager serviceActions from mc-web-console canonical api.yaml
The menu seed came from the raw GitHub URL of mc-web-console's main
branch, while every image is pinned by tag and every other subsystem
config is a copy under conf/docker/conf/<framework>/. That made installs
non-reproducible (whatever main held that day) and impossible offline, and
the post-init script's wget of that URL produced an unused menu.yaml.

- docker-compose(.mini).yaml: mount the existing bundled copy
  conf/mc-web-console/api/conf/webconsole_menu_resources.yaml read-only
  into mc-iam-manager at /app/asset/menu/webconsole_menu_resources.yaml
- MC_WEB_CONSOLE_MENUYAML=asset/menu/webconsole_menu_resources.yaml in
  .env.setup (both) and the tracked conf/mc-iam-manager/.env; the raw URL
  stays as a commented option
- 1_setup_auto.sh / 1_setup_manual.sh: stop fetching menu.yaml (IAM reads
  the seed itself); only spider-check when the env is a URL; log IAM's
  skipped=true (menus seeded once at install); manual option 4b forces a
  re-seed via ?force=true with a confirmation
- drop the orphan conf/docker/menu.yaml and the menu.yaml entries in
  .gitignore / cleanAll.sh
- refresh bundled copies: menu catalog from mc-web-console develop
  3a015768 (61 menus), permission.yaml from mc-iam-manager
  fix/iam-permission-yaml-canonical-ids, InitialMenus description in the
  three api.yaml copies
- README / running-on-instance.md: seed-once model and .env migration note
…an-install crash loop

On a fresh install the IAM/KC proxy blocks resolved their upstream
hostnames at config-parse time, so nginx died with [emerg] host not
found before the mc-iam-manager container existed. Switch the four
static proxy_pass directives to the resolver + variable pattern already
used by the other server blocks so nginx starts regardless of container
startup order.

The /auth/ block drops its literal URI: with a variable proxy_pass a
literal URI replaces the entire request path, which would break
/auth/realms/* subpaths (also fixed in the local template where this
latent defect already existed).
…p deadlock

mc-iam-manager waited for mc-iam-manager-nginx (service_started) while
nginx itself could not start until the mc-iam-manager DNS name existed,
leaving both stuck on a fresh install. The IAM manager has no startup
dependency on nginx (Keycloak and its own healthcheck are reached
directly), and the standalone mc-iam-manager repository already runs
with this dependency removed.
Uses the /nginx-health endpoint already served by the templates so a
crash-looping or misconfigured nginx is visible in compose ps instead
of reporting plain Up. No service depends on nginx being healthy, so
startup ordering is unaffected.
…eset

The dev/prod preset scripts gained this substitution earlier but the
local script was missed, leaving a literal ${MC_OBSERVABILITY_FRONT_PORT}
listen directive in the generated nginx.conf and failing nginx startup
in local mode.
The prod preset read MC_IAM_MANAGER_DOMAIN but never applied it to the
generated nginx.conf. This was a no-op while the template hardcoded the
container hostname; with the resolver/variable pattern the token must be
substituted or nginx fails to parse the config.
nginx was only ever started as a side effect of mc-iam-manager's
compose dependency. With that dependency removed, no wave listed nginx,
so a fresh install brought up the IAM manager without its public-domain
endpoints and it never became healthy. List nginx in wave 1 ahead of
the IAM manager.
fix(compose): break mc-iam-manager <-> nginx clean-install startup deadlock
yh-noh and others added 7 commits September 9, 2026 04:31
Follows the m-cmp/mc-iam-manager v0.6.3 release (2026-09-09). Both the
full and mini compose files are updated.
chore: bump mc-iam-manager, mc-web-console-api/front to 0.6.3
…dled-copy

feat(menu): seed mc-iam-manager from the bundled menu catalog copy
chore: mc-iam-manager 이미지 0.6.3으로 bump
chore: bump mc-web-console-api/front to 0.6.5
@seokho-son

Copy link
Copy Markdown
Member

PTAL @dogfootman

Resolve conflict in conf/docker/conf/mc-iam-manager/permission.yaml by
keeping the develop version: it already grants mcworkflows/mceventlistener
(m-cmp#199) and aligns all menu ids with webconsole_menu_resources.yaml.
@MZC-CSC
MZC-CSC merged commit cf5ca03 into m-cmp:main Sep 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants