blob: 34556dbc0067a6fff853516f6b7f4e65001595b2 [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
# Ambari Third-Party Management Packs
English | [简体中文](README.zh-CN.md)
This repository holds independently versioned third-party management packs for
Apache Ambari. It contains service definitions, configuration templates, and
runtime installers; the `ambari-mpack` authoring and HTTP client tool lives in
Ambari core. A pack describes how Ambari manages a service. Importing a pack
does **not** install that service on any host.
## Scope And Compatibility
The current basic acceptance target is Rocky Linux 8 on aarch64 with systemd.
Ubuntu definitions are retained but were not exercised in the current acceptance
run. The component READMEs and [acceptance records](docs/five-component-implementation.md)
describe tested versions, host prerequisites, topology limits, and remaining
security gaps. These basic tests are not a production or HA certification.
The complete store contains one shared package and ten service packages:
| Package | Role and important prerequisite | Details |
| --- | --- | --- |
| `generic-base` | Shared definitions used by the service packs | [Package](mpacks/generic-base/) |
| `nginx` | OS-managed Nginx, without Hadoop or stack-select | [Package](mpacks/nginx/) |
| `postgresql` | OS-managed PostgreSQL, without Hadoop or stack-select | [Package](mpacks/postgresql/) |
| `kyuubi` | Extends the BIGTOP Spark, Hadoop, and ZooKeeper environment | [README](mpacks/kyuubi/README.md) |
| `airflow` | Isolated Python environment and an external PostgreSQL 14-18 database | [README](mpacks/airflow/README.md) |
| `celeborn` | Pinned official binary; basic single-master topology | [README](mpacks/celeborn/README.md) |
| `dolphinscheduler` | Service-specific runtime and configuration | [README](mpacks/dolphinscheduler/README.md) |
| `trino` | Service-specific runtime and configuration | [README](mpacks/trino/README.md) |
| `doris` | Service-specific runtime and configuration | [README](mpacks/doris/README.md) |
| `elasticsearch` | Service-specific runtime and configuration | [README](mpacks/elasticsearch/README.md) |
| `minio` | Fixed source build, not the earlier definition-only draft | [README](mpacks/minio/README.md) |
`release.json` is the authoritative index of package paths and exact management
definition versions. These versions are **not** observations of installed host
software. `profiles/infrastructure.json` selects only `generic-base`, `nginx`,
and `postgresql` when a smaller bundle is needed. `tooling.lock` records the
compatible authoring tool and manifest schema versions.
## Build A Store Bundle
Use Python 3.10 or newer in an isolated environment and install the compatible
`ambari-mpack` tool from an Ambari core checkout. Check `tooling.lock` before
choosing a tool version. With a virtual environment already activated:
```sh
python3 -m pip install /path/to/ambari/dev-support/mpack
ambari-mpack --help
```
From this repository root, validate a pack and build all versions selected by
`release.json`:
```sh
ambari-mpack --json validate mpacks/nginx
ambari-mpack --json build --all --repository . --output dist --bundle mpackstore
```
The build produces individually versioned archives under `dist/` and the
transport bundle `dist/mpackstore.bundle.tar.gz`. Keep the bundle intact for
distribution. To build only the infrastructure profile, replace `--all` with
`--profile infrastructure` and choose a distinct bundle name. To select specific
packs, use `--packs generic-base,nginx,postgresql` instead. Include every
required dependency in a bundle unless it is already imported on the target
Server. These selection modes read the same exact versions from `release.json`;
building a bundle does not contact an Ambari Server.
## Import And Select Services
Use an Ambari Server that supports the HTTP Management Packs API. In the Ambari
UI, open **Management Packs**, upload `dist/mpackstore.bundle.tar.gz`, and choose
**Import Packages**. Import registers the complete store without enabling
definitions or running package hooks. Then open **Available Services**, select
the desired services, and choose a new cluster or a compatible existing cluster.
The Server resolves required provider packages and extension bindings; selecting
one service does not deploy every service in the bundle.
The equivalent HTTP-only CLI import is:
```sh
ambari-mpack --server "$AMBARI_SERVER_URL" import dist/mpackstore.bundle.tar.gz
ambari-mpack --server "$AMBARI_SERVER_URL" services
```
Set `AMBARI_SERVER_URL` to the target server before running these commands. For
HTTPS with a private CA, pass `--ca-file` to the CLI. The CLI prompts for the
Ambari password in an interactive terminal; do not put it
in a command line or repository file. For automation, provide `AMBARI_PASSWORD`
through a protected environment or secret store. The import command waits for
the operation by default. Keep its exact operation ID and inspect it with
`ambari-mpack --server "$AMBARI_SERVER_URL" operations show OPERATION_ID` if
diagnosis is needed. An interrupted submission can be resumed with `operations
resume SUBMISSION_ID`; do not infer completion from upload success alone.
## Configuration, Updates, And Recovery
The [configuration file guide](docs/content-configuration.md) covers the full
content editors for all ten services and migration from scalar values. Existing
saved content is not silently regenerated from package defaults. An imported
newer package does not automatically replace active definitions or upgrade host
software; activation and deployment are separate operations. Publish a new
package version and update `release.json` when definitions change, rather than
replacing an existing versioned archive.
Package hooks that execute during online activation must declare
`scope: "DEFINITIONS"` and respect their package boundary. This declaration is
not a sandbox for arbitrary code. The PostgreSQL reference's BACKUP creates a
verified, operation-associated archive; RESTORE requires an explicit isolated
target and will not overwrite the source database. Automatic failover,
multi-instance identity, and arbitrary frontend plugins are not provided.
This repository's commands do not directly modify the Ambari Server filesystem
or database. Configure runtime software sources through Ambari repository
records and use authoritative operations and service checks to verify results.
## Repository Guide
- `mpacks/`: versioned package definitions and component-specific READMEs.
- `shared/`: common runtime helpers included by declared package inputs.
- `release.json`, `profiles/`, `tooling.lock`: release selection and tool contract.
- `docs/content-configuration.md`: configuration editing and migration.
- `docs/component-expansion-results.md` and
`docs/five-component-implementation.md`: acceptance evidence and limitations.
- `docs/component-expansion-plan.md`: possible future services, including
SeaTunnel, Superset, and an Iceberg catalog service.
Contributors can run `python3 -m unittest discover -s tests -v` for this
repository's focused tests. Adding a service must not duplicate an existing
BIGTOP provider as a side effect.