Content Sources is an application for storing information about external content (currently YUM repositories) in a central location as well as creating snapshots of those repositories, backed by a Pulp server.
- podman & podman-compose installed or docker & docker-compose installed (and docker running)
- This is used to start a set of containers that are dependencies for content-sources-backend
- yaml2json tool installed (
pip install json2yaml).
Create a config file from the example:
$ cp ./configs/config.yaml.example ./configs/config.yaml$ make compose-build$ make compose-up$ make runHit the API:
$ curl -H "$( ./scripts/header.sh 9999 1111 )" http://localhost:8000/api/content-sources/v1.0/repositories/When its time to shut down the running containers:
$ make compose-downAnd clean the volume that it uses by (this stops the container before doing it if it were running):
$ make compose-cleanThere are other make rules that could be helpful, run
make helpto list them. Some are highlighted below
Migrate the Database
$ make db-migrate-upSeed the database
$ make db-migrate-seedGet an interactive shell:
$ make db-shellOr open directly a postgres client by running:
$ make db-cli-connectYou can open an interactive shell by:
$ make kafka-shellYou can run kafka-console-consumer.sh using KAFKA_TOPIC by:
$ make kafka-topic-consume KAFKA_TOPIC=my-kafka-topic
$ make kafka-topic-consume # Use the first topic at KAFKA_TOPICS listThere are other make rules that could be helpful, run
make helpto list them.
Create the configuration for prometheus, getting started with the example one.
Update the configs/prometheus.yaml file to set your hostname instead of localhost at scrape_configs.job_name.targets:
# Note that the targets object cannot reference localhost, it needs the name of your host where
# the prometheus container is executed.
$ cat ./configs/prometheus.example.yaml | sed "s/localhost/$(hostname)/g" > ./configs/prometheus.yamlTo start prometheus run:
$ make prometheus-upTo stop prometheus container run:
$ make prometheus-downTo open the prometheus web UI, once the container is up, run the below:
$ make prometheus-uiConfiguration requirements
-
To use this you need to enable RBAC into
config/configs.yamlfile:clients: rbac_enabled: True rbac_base_url: http://localhost:8800/api/rbac/v1 rbac_timeout: 30 mocks: rbac: user_read_write: ["jdoe@example.com","jdoe"] user_read: ["tdoe@example.com","tdoe"]
Running it
- Run the application by:
make runor./release/content-sources api consumer instrumentation mock_rbac. - Make some request using:
./scripts/header.sh 12345 jdoe@example.comfor admin or./scripts/header.sh 12345 tdoe@example.comfor viewer.
RBAC mock service is started for
make runTo use it running directly the service:./release/content-sources api consumer instrumentation mock_rbacAdd the optionmock_rbac
$ make db-migrate-up$ make db-migrate-seed$ make runHit the API:
$ curl -H "$( ./scripts/header.sh 9999 1111 )" http://localhost:8000/api/content-sources/v1.0/repositories/$ make openapiThe default configuration file in ./configs/config.yaml.example shows all available config options. Any of these can be overridden with an environment variable. For example "database.name" can be passed in via an environment variable named "DATABASE_NAME".
To use golangci-lint:
make install-golangci-lintmake lint
To use pre-commit linter: make install-pre-commit
| Path | Description |
|---|---|
| api | Openapi docs and doc generation code |
| db/migrations | Database Migrations |
| pkg/api | API Structures that are used for handling data within our API Handlers |
| pkg/config | Config loading and application bootstrapping code |
| pkg/dao | Database Access Object. Abstraction layer that provides an interface and implements it for our default database provider (postgresql). It is separated out for abstraction and easier testing |
| pkg/db | Database connection and migration related code |
| pkg/handler | Methods that directly handle API requests |
| pkg/middleware | Hold all the middleware components created for the service. |
| pkg/event | Event message logic. Mre info here. |
| pkg/models | Structs that represent database models (Gorm) |
| pkg/seeds | Code to help seed the database for both development and testing |