Compare commits
20 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0afe31547e | ||
|
|
b8b9571938 | ||
|
|
7541816442 | ||
|
|
e733195a45 | ||
|
|
8adcc7910f | ||
|
|
5d9488e143 | ||
|
|
de62aeaeb5 | ||
|
|
fce1b50a7a | ||
|
|
71e7d7e417 | ||
|
|
74b97eac49 | ||
|
|
e26462750c | ||
|
|
a61016ef1a | ||
|
|
83452c25e6 | ||
|
|
e090c6f0fe | ||
|
|
6cdab777aa | ||
|
|
0603455e67 | ||
|
|
ba9d082c94 | ||
|
|
398481abed | ||
|
|
f964690315 | ||
|
|
14f7b4ae61 |
17 changed files with 549 additions and 357 deletions
100
Dockerfile
100
Dockerfile
|
|
@ -1,88 +1,41 @@
|
||||||
# Container artifact for the PostgreSQL module
|
|
||||||
|
|
||||||
# This should probably rather be something like...:
|
|
||||||
# FROM registry.fedoraproject.org/module-base-runtime:26
|
|
||||||
# ...and probably would:
|
|
||||||
# - not have any repositories configured
|
|
||||||
# - need a shared-userspace module repo enabled
|
|
||||||
FROM baseruntime/baseruntime:latest
|
FROM baseruntime/baseruntime:latest
|
||||||
|
|
||||||
# PostgreSQL container image
|
# PostgreSQL image for OpenShift.
|
||||||
# Exposed ports:
|
|
||||||
# * 5432/tcp - postgres
|
|
||||||
# Volumes:
|
# Volumes:
|
||||||
# * /var/lib/psql/data - Database cluster for PostgreSQL
|
# * /var/lib/psql/data - Database cluster for PostgreSQL
|
||||||
|
# Environment:
|
||||||
|
# * $POSTGRESQL_USER - Database user name
|
||||||
|
# * $POSTGRESQL_PASSWORD - User's password
|
||||||
|
# * $POSTGRESQL_DATABASE - Name of the database to create
|
||||||
|
# * $POSTGRESQL_ADMIN_PASSWORD (Optional) - Password for the 'postgres'
|
||||||
|
# PostgreSQL administrative account
|
||||||
|
|
||||||
|
ENV POSTGRESQL_VERSION=9.5 \
|
||||||
ENV NAME=postgresql \
|
|
||||||
VERSION=0 \
|
|
||||||
RELEASE=1 \
|
|
||||||
ARCH=x86_64 \
|
|
||||||
LANG=C.UTF-8 \
|
|
||||||
LC_ALL=C.UTF-8 \
|
|
||||||
POSTGRESQL_VERSION=9.6 \
|
|
||||||
HOME=/var/lib/pgsql \
|
HOME=/var/lib/pgsql \
|
||||||
PGUSER=postgres \
|
PGUSER=postgres
|
||||||
POSTGRESQL_MODULE_HASH=d87b0b15567e47f3
|
|
||||||
|
|
||||||
LABEL summary = "PostgreSQL is an object-relational DBMS." \
|
LABEL io.k8s.description="PostgreSQL is an advanced Object-Relational database management system" \
|
||||||
name = "$FGC/$NAME" \
|
io.k8s.display-name="PostgreSQL 9.5" \
|
||||||
version = "$VERSION" \
|
io.openshift.expose-services="5432:postgresql" \
|
||||||
release="$RELEASE.$DISTTAG" \
|
io.openshift.tags="database,postgresql,postgresql95" \
|
||||||
architecture = "$ARCH" \
|
com.redhat.component="postgresql" \
|
||||||
maintainer = "Nils Philippsen <nils@redhat.com>" \
|
maintainer="Pavel Raiskup <praiskup@redhat.com>" \
|
||||||
description = "PostgreSQL is an advanced Object-Relational database management system (DBMS). This container contains the programs needed to create and run a PostgreSQL server, which will in turn allow you to create and maintain PostgreSQL databases." \
|
name="$FCG/postgresql" \
|
||||||
vendor="Fedora Project" \
|
version="0" \
|
||||||
com.redhat.component="$NAME" \
|
release="1.$DISTTAG" \
|
||||||
org.fedoraproject.component="postgresql" \
|
architecture="x86_64" \
|
||||||
authoritative-source-url="registry.fedoraproject.org" \
|
usage="Run without arguments to get usage info." \
|
||||||
usage="docker run -v <dbroot_path>:/var/lib/pgsql:Z -p 5432:5432 -e POSTGRESQL_USER=<user> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database> modularitycontainers/postgresql" \
|
help="/help.1"
|
||||||
io.k8s.description = "PostgreSQL is an advanced Object-Relational database management system (DBMS). This container contains the programs needed to create and run a PostgreSQL server, which will in turn allow you to create and maintain PostgreSQL databases." \
|
|
||||||
io.k8s.display-name="PostgreSQL ${POSTGRESQL_VERSION}" \
|
|
||||||
io.openshift.tags="database,postgresql,postgresql96" \
|
|
||||||
io.openshift.expose-services="5432/tcp:postgres"
|
|
||||||
|
|
||||||
EXPOSE 5432
|
EXPOSE 5432
|
||||||
|
|
||||||
ADD root /
|
ADD root /
|
||||||
|
|
||||||
COPY module-postgresql.repo.in /tmp/module-postgresql.repo.in
|
COPY repos/* /etc/yum.repos.d/
|
||||||
COPY run_tests.sh /usr/bin/run_tests.sh
|
|
||||||
|
|
||||||
# Install the postgresql server component.
|
RUN microdnf --nodocs --enablerepo postgresql install -y postgresql postgresql-server postgresql-contrib && \
|
||||||
#
|
microdnf --nodocs --enablerepo fedora install -y rsync tar gettext bind-utils nss_wrapper findutils python && \
|
||||||
# This image must forever use UID 26 for postgres user so our volumes are
|
microdnf clean all && \
|
||||||
# safe in the future. This should *never* change, the last test is there
|
|
||||||
# to make sure of that.
|
|
||||||
|
|
||||||
# Notes about the below:
|
|
||||||
# - first sed cmd: don't ask
|
|
||||||
# - rpm -e ... microdnf install systemd: workaround to missing
|
|
||||||
# microdnf downgrade/distro-sync
|
|
||||||
# - Update packages so everything available is current
|
|
||||||
# - Need to have charset files, disable normal repo(s), enable module repo(s)
|
|
||||||
# ORCHESTRATION:
|
|
||||||
# - Newer versions of the shared-userspace module are supposed to have
|
|
||||||
# findutils, not there yet
|
|
||||||
# - gettext: /usr/bin/envsubst
|
|
||||||
# - no working python module yet
|
|
||||||
|
|
||||||
RUN \
|
|
||||||
sed -i 's|/jkaluza/|/ralph/|g' /etc/yum.repos.d/build.repo && \
|
|
||||||
rpm -e --justdb --nodeps systemd-libs && \
|
|
||||||
microdnf install -y --setopt=tsflags=nodocs systemd && \
|
|
||||||
# microdnf update -y --setopt=tsflags=nodocs && \
|
|
||||||
# microdnf install -y glibc-locale-source && \
|
|
||||||
microdnf install -y findutils && \
|
|
||||||
microdnf install -y gettext && \
|
|
||||||
# microdnf install -y nss_wrapper && \
|
|
||||||
# microdnf install -y /usr/bin/python && \
|
|
||||||
sed 's|@POSTGRESQL_MODULE_HASH@|'${POSTGRESQL_MODULE_HASH}'|g; s|${basearch}|'${ARCH}'|g' < /tmp/module-postgresql.repo.in > /etc/yum.repos.d/module-postgresql.repo && rm -f /tmp/module-postgresql.repo.in && \
|
|
||||||
INSTALL_PKGS="postgresql postgresql-server" && \
|
|
||||||
microdnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \
|
|
||||||
rpm -V $INSTALL_PKGS && \
|
|
||||||
microdnf -y clean all && \
|
|
||||||
# localedef -f UTF-8 -i en_US en_US.UTF-8 && \
|
|
||||||
test "$(id postgres)" = "uid=26(postgres) gid=26(postgres) groups=26(postgres)" && \
|
test "$(id postgres)" = "uid=26(postgres) gid=26(postgres) groups=26(postgres)" && \
|
||||||
mkdir -p /var/lib/pgsql/data && \
|
mkdir -p /var/lib/pgsql/data && \
|
||||||
/usr/libexec/fix-permissions /var/lib/pgsql && \
|
/usr/libexec/fix-permissions /var/lib/pgsql && \
|
||||||
|
|
@ -91,9 +44,8 @@ RUN \
|
||||||
# Get prefix path and path to scripts rather than hard-code them in scripts
|
# Get prefix path and path to scripts rather than hard-code them in scripts
|
||||||
ENV CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/postgresql
|
ENV CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/postgresql
|
||||||
|
|
||||||
VOLUME ["/var/lib/pgsql"]
|
VOLUME ["/var/lib/pgsql/data"]
|
||||||
|
|
||||||
USER 26
|
USER 26
|
||||||
|
|
||||||
ENTRYPOINT ["container-entrypoint"]
|
|
||||||
CMD ["run-postgresql"]
|
CMD ["run-postgresql"]
|
||||||
|
|
|
||||||
4
Makefile
4
Makefile
|
|
@ -1,4 +1,4 @@
|
||||||
IMAGE_NAME = modularitycontainers/postgresql
|
IMAGE_NAME = postgresql
|
||||||
|
|
||||||
MODULEMDURL=file://postgresql.yaml
|
MODULEMDURL=file://postgresql.yaml
|
||||||
|
|
||||||
|
|
@ -8,7 +8,7 @@ build:
|
||||||
docker build --tag=$(IMAGE_NAME) .
|
docker build --tag=$(IMAGE_NAME) .
|
||||||
|
|
||||||
run: build
|
run: build
|
||||||
docker run -it -p 80:80 $(IMAGE_NAME)
|
docker run -d $(IMAGE_NAME)
|
||||||
|
|
||||||
test: build
|
test: build
|
||||||
cd tests; MODULE=docker MODULEMD=$(MODULEMDURL) URL="docker=$(IMAGE_NAME)" make all
|
cd tests; MODULE=docker MODULEMD=$(MODULEMDURL) URL="docker=$(IMAGE_NAME)" make all
|
||||||
|
|
|
||||||
41
README.md
41
README.md
|
|
@ -1,41 +0,0 @@
|
||||||
# PostgreSQL
|
|
||||||
|
|
||||||
PostgreSQL is an object-relational Database Management System.
|
|
||||||
|
|
||||||
This is based on the SCL container image for version 9.5 at:
|
|
||||||
|
|
||||||
https://github.com/sclorg/postgresql-container
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
You must either specify the following environment variables:
|
|
||||||
|
|
||||||
* POSTGRESQL_USER
|
|
||||||
* POSTGRESQL_PASSWORD
|
|
||||||
* POSTGRESQL_DATABASE
|
|
||||||
|
|
||||||
Or the following environment variable:
|
|
||||||
|
|
||||||
* POSTGRESQL_ADMIN_PASSWORD
|
|
||||||
|
|
||||||
Or both.
|
|
||||||
|
|
||||||
Optional settings:
|
|
||||||
|
|
||||||
* POSTGRESQL_MAX_CONNECTIONS (default: 100)
|
|
||||||
* POSTGRESQL_MAX_PREPARED_TRANSACTIONS (default: 0)
|
|
||||||
* POSTGRESQL_SHARED_BUFFERS (default: 32MB)
|
|
||||||
|
|
||||||
## Running in docker
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run -v <dbroot_path>:/var/lib/pgsql:Z -p 5432:5432 -e POSTGRESQL_USER=<user> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database> modularitycontainers/postgresql
|
|
||||||
```
|
|
||||||
|
|
||||||
Substitute these placeholders with real values:
|
|
||||||
|
|
||||||
* `dbroot_path` - path to the database root on the host which should be mounted
|
|
||||||
on `/var/lib/pgsql` in the container. Note that the `postgres` user (uid 26)
|
|
||||||
needs to be able to read and write in that directory.
|
|
||||||
* `user`, `password`, `database` - details with which a database and user
|
|
||||||
should be created if the database cluster directory isn't initialized yet.
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
[module-postgresql]
|
|
||||||
name=Repository for the PostgreSQL module
|
|
||||||
baseurl=https://kojipkgs.fedoraproject.org/repos/module-@POSTGRESQL_MODULE_HASH@-build/latest/${basearch}/
|
|
||||||
enabled=1
|
|
||||||
gpgcheck=0
|
|
||||||
|
|
@ -1,30 +1,19 @@
|
||||||
document: modulemd
|
document: modulemd
|
||||||
version: 1
|
version: 1
|
||||||
data:
|
data:
|
||||||
# name, stream, version are filled in by the build system
|
summary: postgresql module
|
||||||
#name: ""
|
description: This postgresql module has been generated.
|
||||||
#stream: ""
|
|
||||||
#version: 0
|
|
||||||
summary: 'The programs needed to create and run a PostgreSQL server'
|
|
||||||
description: |-
|
|
||||||
PostgreSQL is an advanced Object-Relational database management system
|
|
||||||
(DBMS). The postgresql-server package contains the programs needed to
|
|
||||||
create and run a PostgreSQL server, which will in turn allow you to create
|
|
||||||
and maintain PostgreSQL databases.
|
|
||||||
license:
|
license:
|
||||||
module:
|
module: [ MIT ]
|
||||||
- MIT
|
|
||||||
content:
|
|
||||||
- PostgreSQL
|
|
||||||
dependencies:
|
dependencies:
|
||||||
buildrequires:
|
buildrequires:
|
||||||
base-runtime: f26
|
bootstrap: master
|
||||||
common-build-dependencies: f26
|
|
||||||
common-build-dependencies-bootstrap: f26
|
|
||||||
shared-userspace: f26
|
|
||||||
perl: f26
|
|
||||||
requires:
|
requires:
|
||||||
base-runtime: f26
|
platform: master
|
||||||
|
references:
|
||||||
|
community: https://docs.pagure.org/modularity/
|
||||||
|
documentation: https://github.com/modularity-modules/postgresql
|
||||||
|
tracker: https://github.com/modularity-modules/postgresql
|
||||||
api:
|
api:
|
||||||
rpms:
|
rpms:
|
||||||
- postgresql
|
- postgresql
|
||||||
|
|
@ -32,50 +21,21 @@ data:
|
||||||
default:
|
default:
|
||||||
rpms:
|
rpms:
|
||||||
- postgresql-server
|
- postgresql-server
|
||||||
|
server:
|
||||||
|
rpms:
|
||||||
|
- postgresql-server
|
||||||
client:
|
client:
|
||||||
rpms:
|
rpms:
|
||||||
- postgresql
|
- postgresql
|
||||||
filter: {}
|
filter: {}
|
||||||
components:
|
components:
|
||||||
rpms:
|
rpms:
|
||||||
# part of base-runtime:
|
# postgresql-10.0-3.fc28
|
||||||
# gettext
|
|
||||||
# part of common-build-dependencies:
|
|
||||||
# autoconf(uuid), multilib-rpm-config, docbook-utils
|
|
||||||
# part of shared-userspace:
|
|
||||||
# docbook-dtds, docbook-style-dsssl, libxslt, perl-SGMLSpm, python2, tcl
|
|
||||||
oniguruma:
|
|
||||||
rationale: 'Build dependency (for slang)'
|
|
||||||
ref: f26
|
|
||||||
perl-Data-UUID:
|
|
||||||
rationale: 'Build dependency (for uuid)'
|
|
||||||
ref: f26
|
|
||||||
rsh:
|
|
||||||
rationale: 'Build dependency (for lynx)'
|
|
||||||
ref: f26
|
|
||||||
telnet:
|
|
||||||
rationale: 'Build dependency (for lynx)'
|
|
||||||
ref: f26
|
|
||||||
slang:
|
|
||||||
buildorder: 1
|
|
||||||
rationale: 'Build dependency (for lynx)'
|
|
||||||
ref: f26
|
|
||||||
uuid:
|
|
||||||
buildorder: 1
|
|
||||||
rationale: 'Build dependency (for postgresql).'
|
|
||||||
ref: f26
|
|
||||||
lynx:
|
|
||||||
buildorder: 2
|
|
||||||
rationale: >-
|
|
||||||
Build dependency (for postgresql),
|
|
||||||
ref: f26
|
|
||||||
postgresql:
|
postgresql:
|
||||||
buildorder: 3
|
rationale: Generated.
|
||||||
rationale: 'The API we want to provide.'
|
ref: 07894e0da4b994092abd0084fba982e075ccf3f3
|
||||||
# This branch doesn't BR: systemtap(-devel), elinks which pulls in
|
# uuid-1.6.2-39.fc27
|
||||||
# loads of other junk
|
uuid:
|
||||||
ref: private-f27-modules
|
rationale: Generated.
|
||||||
tcl-pgtcl:
|
ref: 43c916caff937bdf8a97ded1abff3e01df4895f4
|
||||||
buildorder: 4
|
|
||||||
rationale: 'Runtime dependency (for postgresql-pltcl)'
|
|
||||||
ref: f26
|
|
||||||
|
|
|
||||||
5
repos/fedora.repo
Normal file
5
repos/fedora.repo
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[fedora]
|
||||||
|
name=fedora
|
||||||
|
baseurl=https://mirrors.nic.cz/fedora/linux/development/26/Everything/x86_64/os/
|
||||||
|
enabled=0
|
||||||
|
|
||||||
4
repos/postgresql.repo
Normal file
4
repos/postgresql.repo
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[postgresql]
|
||||||
|
name=postgresql
|
||||||
|
baseurl=https://kojipkgs.fedoraproject.org/repos/module-5a0a295c9673c2a1/latest/x86_64/
|
||||||
|
enabled=0
|
||||||
190
root/help.1
Normal file
190
root/help.1
Normal file
|
|
@ -0,0 +1,190 @@
|
||||||
|
.\"t
|
||||||
|
.\" WARNING: Do not edit this file manually, it is generated from README.md automatically.
|
||||||
|
.\"
|
||||||
|
.\"t
|
||||||
|
.\" Automatically generated by Pandoc 1.16.0.2
|
||||||
|
.\"
|
||||||
|
.TH "POSTGRESQL\-95\-RHEL7" "1" "February 22, 2017" "Container Image Pages" ""
|
||||||
|
.hy
|
||||||
|
.SH PostgreSQL Docker image
|
||||||
|
.PP
|
||||||
|
This repository contains Dockerfiles for PostgreSQL images for general
|
||||||
|
usage and OpenShift.
|
||||||
|
Users can choose between RHEL and CentOS based images.
|
||||||
|
.SS Environment variables and volumes
|
||||||
|
.PP
|
||||||
|
The image recognizes the following environment variables that you can
|
||||||
|
set during initialization by passing \f[C]\-e\ VAR=VALUE\f[] to the
|
||||||
|
Docker run command.
|
||||||
|
.PP
|
||||||
|
.TS
|
||||||
|
tab(@);
|
||||||
|
lw(26.7n) lw(43.3n).
|
||||||
|
T{
|
||||||
|
Variable name
|
||||||
|
T}@T{
|
||||||
|
Description
|
||||||
|
T}
|
||||||
|
_
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_USER\f[]
|
||||||
|
T}@T{
|
||||||
|
User name for PostgreSQL account to be created
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_PASSWORD\f[]
|
||||||
|
T}@T{
|
||||||
|
Password for the user account
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_DATABASE\f[]
|
||||||
|
T}@T{
|
||||||
|
Database name
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_ADMIN_PASSWORD\f[]
|
||||||
|
T}@T{
|
||||||
|
Password for the \f[C]postgres\f[] admin account (optional)
|
||||||
|
T}
|
||||||
|
.TE
|
||||||
|
.PP
|
||||||
|
The following environment variables influence the PostgreSQL
|
||||||
|
configuration file.
|
||||||
|
They are all optional.
|
||||||
|
.PP
|
||||||
|
.TS
|
||||||
|
tab(@);
|
||||||
|
lw(15.7n) lw(37.6n) lw(16.7n).
|
||||||
|
T{
|
||||||
|
Variable name
|
||||||
|
T}@T{
|
||||||
|
Description
|
||||||
|
T}@T{
|
||||||
|
Default
|
||||||
|
T}
|
||||||
|
_
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_MAX_CONNECTIONS\f[]
|
||||||
|
T}@T{
|
||||||
|
The maximum number of client connections allowed
|
||||||
|
T}@T{
|
||||||
|
100
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_MAX_PREPARED_TRANSACTIONS\f[]
|
||||||
|
T}@T{
|
||||||
|
Sets the maximum number of transactions that can be in the "prepared"
|
||||||
|
state.
|
||||||
|
If you are using prepared transactions, you will probably want this to
|
||||||
|
be at least as large as max_connections
|
||||||
|
T}@T{
|
||||||
|
0
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_SHARED_BUFFERS\f[]
|
||||||
|
T}@T{
|
||||||
|
Sets how much memory is dedicated to PostgreSQL to use for caching data
|
||||||
|
T}@T{
|
||||||
|
32M
|
||||||
|
T}
|
||||||
|
T{
|
||||||
|
\f[C]POSTGRESQL_EFFECTIVE_CACHE_SIZE\f[]
|
||||||
|
T}@T{
|
||||||
|
Set to an estimate of how much memory is available for disk caching by
|
||||||
|
the operating system and within the database itself
|
||||||
|
T}@T{
|
||||||
|
128M
|
||||||
|
T}
|
||||||
|
.TE
|
||||||
|
.PP
|
||||||
|
You can also set the following mount points by passing the
|
||||||
|
\f[C]\-v\ /host:/container\f[] flag to Docker.
|
||||||
|
.PP
|
||||||
|
.TS
|
||||||
|
tab(@);
|
||||||
|
l l.
|
||||||
|
T{
|
||||||
|
Volume mount point
|
||||||
|
T}@T{
|
||||||
|
Description
|
||||||
|
T}
|
||||||
|
_
|
||||||
|
T{
|
||||||
|
\f[C]/var/lib/pgsql/data\f[]
|
||||||
|
T}@T{
|
||||||
|
PostgreSQL database cluster directory
|
||||||
|
T}
|
||||||
|
.TE
|
||||||
|
.PP
|
||||||
|
\f[B]Notice: When mouting a directory from the host into the container,
|
||||||
|
ensure that the mounted directory has the appropriate permissions and
|
||||||
|
that the owner and group of the directory matches the user UID or name
|
||||||
|
which is running inside the container.\f[]
|
||||||
|
.SS Usage
|
||||||
|
.PP
|
||||||
|
For this, we will assume that you are using the
|
||||||
|
\f[C]openshift/postgresql\-92\-centos7\f[] image.
|
||||||
|
If you want to set only the mandatory environment variables and not
|
||||||
|
store the database in a host directory, execute the following command:
|
||||||
|
.IP
|
||||||
|
.nf
|
||||||
|
\f[C]
|
||||||
|
$\ docker\ run\ \-d\ \-\-name\ postgresql_database\ \-e\ POSTGRESQL_USER=user\ \-e\ POSTGRESQL_PASSWORD=pass\ \-e\ POSTGRESQL_DATABASE=db\ \-p\ 5432:5432\ openshift/postgresql\-92\-centos7
|
||||||
|
\f[]
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
This will create a container named \f[C]postgresql_database\f[] running
|
||||||
|
PostgreSQL with database \f[C]db\f[] and user with credentials
|
||||||
|
\f[C]user:pass\f[].
|
||||||
|
Port 5432 will be exposed and mapped to the host.
|
||||||
|
If you want your database to be persistent across container executions,
|
||||||
|
also add a \f[C]\-v\ /host/db/path:/var/lib/pgsql/data\f[] argument.
|
||||||
|
This will be the PostgreSQL database cluster directory.
|
||||||
|
.PP
|
||||||
|
If the database cluster directory is not initialized, the entrypoint
|
||||||
|
script will first run
|
||||||
|
\f[C]initdb\f[] (http://www.postgresql.org/docs/9.2/static/app-initdb.html)
|
||||||
|
and setup necessary database users and passwords.
|
||||||
|
After the database is initialized, or if it was already present,
|
||||||
|
\f[C]postgres\f[] (http://www.postgresql.org/docs/9.2/static/app-postgres.html)
|
||||||
|
is executed and will run as PID 1.
|
||||||
|
You can stop the detached container by running
|
||||||
|
\f[C]docker\ stop\ postgresql_database\f[].
|
||||||
|
.SS PostgreSQL auto\-tuning
|
||||||
|
.PP
|
||||||
|
When the PostgreSQL image is run with the \f[C]\-\-memory\f[] parameter
|
||||||
|
set and if there are no values provided for
|
||||||
|
\f[C]POSTGRESQL_SHARED_BUFFERS\f[] and
|
||||||
|
\f[C]POSTGRESQL_EFFECTIVE_CACHE_SIZE\f[] those values are automatically
|
||||||
|
calculated based on the value provided in the \f[C]\-\-memory\f[]
|
||||||
|
parameter.
|
||||||
|
.PP
|
||||||
|
The values are calculated based on the
|
||||||
|
upstream (https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server)
|
||||||
|
formulas.
|
||||||
|
For the \f[C]shared_buffers\f[] we use 1/4 of given memory and for the
|
||||||
|
\f[C]effective_cache_size\f[] we set the value to 1/2 of the given
|
||||||
|
memory.
|
||||||
|
.SS PostgreSQL admin account
|
||||||
|
.PP
|
||||||
|
The admin account \f[C]postgres\f[] has no password set by default, only
|
||||||
|
allowing local connections.
|
||||||
|
You can set it by setting the \f[C]POSTGRESQL_ADMIN_PASSWORD\f[]
|
||||||
|
environment variable when initializing your container.
|
||||||
|
This will allow you to login to the \f[C]postgres\f[] account remotely.
|
||||||
|
Local connections will still not require a password.
|
||||||
|
.SS Changing passwords
|
||||||
|
.PP
|
||||||
|
Since passwords are part of the image configuration, the only supported
|
||||||
|
method to change passwords for the database user
|
||||||
|
(\f[C]POSTGRESQL_USER\f[]) and \f[C]postgres\f[] admin user is by
|
||||||
|
changing the environment variables \f[C]POSTGRESQL_PASSWORD\f[] and
|
||||||
|
\f[C]POSTGRESQL_ADMIN_PASSWORD\f[], respectively.
|
||||||
|
.PP
|
||||||
|
Changing database passwords through SQL statements or any way other than
|
||||||
|
through the environment variables aforementioned will cause a mismatch
|
||||||
|
between the values stored in the variables and the actual passwords.
|
||||||
|
Whenever a database container starts it will reset the passwords to the
|
||||||
|
values stored in the environment variables.
|
||||||
|
.SH AUTHORS
|
||||||
|
Red Hat.
|
||||||
|
|
@ -1,99 +1,92 @@
|
||||||
#!/bin/bash
|
#!/usr/bin/python
|
||||||
|
|
||||||
# Script for parsing cgroup information
|
"""
|
||||||
#
|
Script for parsing cgroup information
|
||||||
# This script will read some limits from the cgroup system and parse
|
|
||||||
# them, printing out "VARIABLE=VALUE" on each line for every limit that is
|
|
||||||
# successfully read. Output of this script can be directly fed into
|
|
||||||
# bash's export command. Recommended usage from a bash script:
|
|
||||||
#
|
|
||||||
# set -o errexit
|
|
||||||
# export_vars=$(cgroup-limits) ; export $export_vars
|
|
||||||
#
|
|
||||||
# Variables currently supported:
|
|
||||||
# MAX_MEMORY_LIMIT_IN_BYTES
|
|
||||||
# Maximum possible limit MEMORY_LIMIT_IN_BYTES can have. This is
|
|
||||||
# currently a constant value of 9223372036854775807.
|
|
||||||
# MEMORY_LIMIT_IN_BYTES
|
|
||||||
# Maximum amount of user memory in bytes. If this value is set
|
|
||||||
# to the same value as MAX_MEMORY_LIMIT_IN_BYTES, it means that
|
|
||||||
# there is no limit set. The value is taken from
|
|
||||||
# /sys/fs/cgroup/memory/memory.limit_in_bytes
|
|
||||||
# RAM_SIZE_IN_BYTES
|
|
||||||
# Available memory in bytes. The value is taken from /proc/meminfo.
|
|
||||||
# NUMBER_OF_CORES
|
|
||||||
# Number of detected CPU cores that can be used. This value is
|
|
||||||
# calculated from /sys/fs/cgroup/cpuset/cpuset.cpus
|
|
||||||
# NO_MEMORY_LIMIT
|
|
||||||
# Set to "true" if MEMORY_LIMIT_IN_BYTES is so high that the caller
|
|
||||||
# can act as if no memory limit was set. Undefined otherwise.
|
|
||||||
|
|
||||||
get_memory_limit() {
|
This script will read some limits from the cgroup system and parse
|
||||||
local limit="$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)"
|
them, printing out "VARIABLE=VALUE" on each line for every limit that is
|
||||||
if [ $? -eq 0 ]; then
|
successfully read. Output of this script can be directly fed into
|
||||||
echo "$limit"
|
bash's export command. Recommended usage from a bash script:
|
||||||
else
|
|
||||||
echo "Warning: Can't detect memory limit from cgroups" >&2
|
set -o errexit
|
||||||
fi
|
export_vars=$(cgroup-limits) ; export $export_vars
|
||||||
|
|
||||||
|
Variables currently supported:
|
||||||
|
MAX_MEMORY_LIMIT_IN_BYTES
|
||||||
|
Maximum possible limit MEMORY_LIMIT_IN_BYTES can have. This is
|
||||||
|
currently constant value of 9223372036854775807.
|
||||||
|
MEMORY_LIMIT_IN_BYTES
|
||||||
|
Maximum amount of user memory in bytes. If this value is set
|
||||||
|
to the same value as MAX_MEMORY_LIMIT_IN_BYTES, it means that
|
||||||
|
there is no limit set. The value is taken from
|
||||||
|
/sys/fs/cgroup/memory/memory.limit_in_bytes
|
||||||
|
NUMBER_OF_CORES
|
||||||
|
Number of detected CPU cores that can be used. This value is
|
||||||
|
calculated from /sys/fs/cgroup/cpuset/cpuset.cpus
|
||||||
|
NO_MEMORY_LIMIT
|
||||||
|
Set to "true" if MEMORY_LIMIT_IN_BYTES is so high that the caller
|
||||||
|
can act as if no memory limit was set. Undefined otherwise.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def _read_file(path):
|
||||||
|
try:
|
||||||
|
with open(path, 'r') as f:
|
||||||
|
return f.read().strip()
|
||||||
|
except IOError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_memory_limit():
|
||||||
|
"""
|
||||||
|
Read memory limit, in bytes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
limit = _read_file('/sys/fs/cgroup/memory/memory.limit_in_bytes')
|
||||||
|
if limit is None or not limit.isdigit():
|
||||||
|
print("Warning: Can't detect memory limit from cgroups",
|
||||||
|
file=sys.stderr)
|
||||||
|
return None
|
||||||
|
return int(limit)
|
||||||
|
|
||||||
|
|
||||||
|
def get_number_of_cores():
|
||||||
|
"""
|
||||||
|
Read number of CPU cores.
|
||||||
|
"""
|
||||||
|
|
||||||
|
core_count = 0
|
||||||
|
|
||||||
|
line = _read_file('/sys/fs/cgroup/cpuset/cpuset.cpus')
|
||||||
|
if line is None:
|
||||||
|
print("Warning: Can't detect number of CPU cores from cgroups",
|
||||||
|
file=sys.stderr)
|
||||||
|
return None
|
||||||
|
|
||||||
|
for group in line.split(','):
|
||||||
|
core_ids = list(map(int, group.split('-')))
|
||||||
|
if len(core_ids) == 2:
|
||||||
|
core_count += core_ids[1] - core_ids[0] + 1
|
||||||
|
else:
|
||||||
|
core_count += 1
|
||||||
|
|
||||||
|
return core_count
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
env_vars = {
|
||||||
|
"MAX_MEMORY_LIMIT_IN_BYTES": 9223372036854775807,
|
||||||
|
"MEMORY_LIMIT_IN_BYTES": get_memory_limit(),
|
||||||
|
"NUMBER_OF_CORES": get_number_of_cores()
|
||||||
}
|
}
|
||||||
|
|
||||||
get_meminfo_ram_size() {
|
env_vars = {k: v for k, v in env_vars.items() if v is not None}
|
||||||
local limit="$(cat /proc/meminfo | while read key val unit rest; do if [ "$key" = "MemTotal:" ]; then echo "$val $unit"; break; fi; done)"
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
local val="${limit/ *}"
|
|
||||||
local unit="${limit/* }"
|
|
||||||
case "$unit" in
|
|
||||||
kB)
|
|
||||||
val=$(($val * 1024))
|
|
||||||
;;
|
|
||||||
MB)
|
|
||||||
val=$(($val * 1024 * 1024))
|
|
||||||
;;
|
|
||||||
GB)
|
|
||||||
val=$(($val * 1024 * 1024 * 1024))
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo "$val"
|
|
||||||
else
|
|
||||||
echo "Warning: Can't detect RAM site from /proc/meminfo." >&2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_number_of_cores() {
|
if env_vars.get("MEMORY_LIMIT_IN_BYTES", 0) >= 92233720368547:
|
||||||
local core_count=0
|
env_vars["NO_MEMORY_LIMIT"] = "true"
|
||||||
local group
|
|
||||||
local sysfs_cpus="$(cat /sys/fs/cgroup/cpuset/cpuset.cpus)"
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
for key, value in env_vars.items():
|
||||||
for group in ${sysfs_cpus//,/ }; do
|
print("{0}={1}".format(key, value))
|
||||||
local from="${group%-*}"
|
|
||||||
local to="${group#*-}"
|
|
||||||
core_count=$(($core_count + $to - $from + 1))
|
|
||||||
done
|
|
||||||
echo "$core_count"
|
|
||||||
else
|
|
||||||
echo "Warning: Can't detect number of CPU cores from cgroups" >&2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
MAX_MEMORY_LIMIT_IN_BYTES=9223372036854775807
|
|
||||||
MEMORY_LIMIT_IN_BYTES="$(get_memory_limit)"
|
|
||||||
RAM_SIZE_IN_BYTES="$(get_meminfo_ram_size)"
|
|
||||||
NUMBER_OF_CORES="$(get_number_of_cores)"
|
|
||||||
|
|
||||||
echo "MAX_MEMORY_LIMIT_IN_BYTES=$MAX_MEMORY_LIMIT_IN_BYTES"
|
|
||||||
|
|
||||||
if [ -n "$MEMORY_LIMIT_IN_BYTES" ]; then
|
|
||||||
echo "MEMORY_LIMIT_IN_BYTES=$MEMORY_LIMIT_IN_BYTES"
|
|
||||||
if [ "$MEMORY_LIMIT_IN_BYTES" -ge "$MAX_MEMORY_LIMIT_IN_BYTES" ]; then
|
|
||||||
echo "NO_MEMORY_LIMIT=true"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$RAM_SIZE_IN_BYTES" ]; then
|
|
||||||
echo "RAM_SIZE_IN_BYTES=$RAM_SIZE_IN_BYTES"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$NUMBER_OF_CORES" ]; then
|
|
||||||
echo "NUMBER_OF_CORES=$NUMBER_OF_CORES"
|
|
||||||
fi
|
|
||||||
|
|
|
||||||
|
|
@ -6,19 +6,14 @@ export POSTGRESQL_MAX_PREPARED_TRANSACTIONS=${POSTGRESQL_MAX_PREPARED_TRANSACTIO
|
||||||
# limits are set).
|
# limits are set).
|
||||||
# Users can still override this by setting the POSTGRESQL_SHARED_BUFFERS
|
# Users can still override this by setting the POSTGRESQL_SHARED_BUFFERS
|
||||||
# and POSTGRESQL_EFFECTIVE_CACHE_SIZE variables.
|
# and POSTGRESQL_EFFECTIVE_CACHE_SIZE variables.
|
||||||
if [[ "${NO_MEMORY_LIMIT:-}" == "true" || -z "${MEMORY_LIMIT_IN_BYTES:-}" || -z "${RAM_SIZE_IN_BYTES:-}" ]]; then
|
if [[ "${NO_MEMORY_LIMIT:-}" == "true" || -z "${MEMORY_LIMIT_IN_BYTES}" ]]; then
|
||||||
export POSTGRESQL_SHARED_BUFFERS=${POSTGRESQL_SHARED_BUFFERS:-32MB}
|
export POSTGRESQL_SHARED_BUFFERS=${POSTGRESQL_SHARED_BUFFERS:-32MB}
|
||||||
export POSTGRESQL_EFFECTIVE_CACHE_SIZE=${POSTGRESQL_EFFECTIVE_CACHE_SIZE:-128MB}
|
export POSTGRESQL_EFFECTIVE_CACHE_SIZE=${POSTGRESQL_EFFECTIVE_CACHE_SIZE:-128MB}
|
||||||
else
|
else
|
||||||
if [ "$MEMORY_LIMIT_IN_BYTES" -gt "$RAM_SIZE_IN_BYTES" ]; then
|
|
||||||
mem_limit="$RAM_SIZE_IN_BYTES"
|
|
||||||
else
|
|
||||||
mem_limit="$MEMORY_LIMIT_IN_BYTES"
|
|
||||||
fi
|
|
||||||
# Use 1/4 of given memory for shared buffers
|
# Use 1/4 of given memory for shared buffers
|
||||||
shared_buffers_computed="$(($mem_limit/1024/1024/4))MB"
|
shared_buffers_computed="$(($MEMORY_LIMIT_IN_BYTES/1024/1024/4))MB"
|
||||||
# Setting effective_cache_size to 1/2 of total memory would be a normal conservative setting,
|
# Setting effective_cache_size to 1/2 of total memory would be a normal conservative setting,
|
||||||
effective_cache="$(($mem_limit/1024/1024/2))MB"
|
effective_cache="$(($MEMORY_LIMIT_IN_BYTES/1024/1024/2))MB"
|
||||||
export POSTGRESQL_SHARED_BUFFERS=${POSTGRESQL_SHARED_BUFFERS:-$shared_buffers_computed}
|
export POSTGRESQL_SHARED_BUFFERS=${POSTGRESQL_SHARED_BUFFERS:-$shared_buffers_computed}
|
||||||
export POSTGRESQL_EFFECTIVE_CACHE_SIZE=${POSTGRESQL_EFFECTIVE_CACHE_SIZE:-$effective_cache}
|
export POSTGRESQL_EFFECTIVE_CACHE_SIZE=${POSTGRESQL_EFFECTIVE_CACHE_SIZE:-$effective_cache}
|
||||||
fi
|
fi
|
||||||
|
|
@ -131,7 +126,7 @@ function generate_passwd_file() {
|
||||||
export GROUP_ID=$(id -g)
|
export GROUP_ID=$(id -g)
|
||||||
grep -v ^postgres /etc/passwd > "$HOME/passwd"
|
grep -v ^postgres /etc/passwd > "$HOME/passwd"
|
||||||
echo "postgres:x:${USER_ID}:${GROUP_ID}:PostgreSQL Server:${HOME}:/bin/bash" >> "$HOME/passwd"
|
echo "postgres:x:${USER_ID}:${GROUP_ID}:PostgreSQL Server:${HOME}:/bin/bash" >> "$HOME/passwd"
|
||||||
#export LD_PRELOAD=libnss_wrapper.so
|
export LD_PRELOAD=libnss_wrapper.so
|
||||||
export NSS_WRAPPER_PASSWD=${HOME}/passwd
|
export NSS_WRAPPER_PASSWD=${HOME}/passwd
|
||||||
export NSS_WRAPPER_GROUP=/etc/group
|
export NSS_WRAPPER_GROUP=/etc/group
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,66 +1,14 @@
|
||||||
document: modularity-testing
|
document: modularity-testing
|
||||||
version: 1
|
version: 1
|
||||||
name: postgresql
|
name: postgresql
|
||||||
modulemd-url: https://src.fedoraproject.org/cgit/modules/postgresql.git/tree/postgresql.yaml?h=f26
|
modulemd-url: https://src.fedoraproject.org/cgit/modules/postgresql.git/plain/postgresql.yaml
|
||||||
service:
|
service:
|
||||||
port: 5432
|
port: 5432
|
||||||
packages:
|
|
||||||
rpms:
|
|
||||||
- postgresql-server
|
|
||||||
# seq
|
|
||||||
- coreutils
|
|
||||||
testdependecies:
|
|
||||||
rpms:
|
|
||||||
- postgresql
|
|
||||||
- systemd
|
|
||||||
module:
|
module:
|
||||||
docker:
|
docker:
|
||||||
start: "docker run -it -p 5432:5432 -e POSTGRESQL_USER=mtftest -e POSTGRESQL_PASSWORD=mtftest -e POSTGRESQL_DATABASE=mtftest"
|
start: "docker run -it -e POSTGRESQL_USER=user -e POSTGRESQL_PASSWORD=p -e POSTGRESQL_DATABASE=db -e LC_ALL=C -p 5432:5432"
|
||||||
labels:
|
container: postgresql
|
||||||
description: "PostgreSQL is an advanced Object-Relational database management system (DBMS)."
|
|
||||||
io.k8s.description: "PostgreSQL is an advanced Object-Relational database management system (DBMS)."
|
|
||||||
source: https://github.com/container-images/postgresql.git
|
|
||||||
container: docker.io/modularitycontainers/postgresql
|
|
||||||
rpm:
|
rpm:
|
||||||
setup: postgresql-setup initdb
|
start: run-postgresql
|
||||||
start: systemctl start postgresql
|
|
||||||
stop: systemctl stop postgresql
|
|
||||||
status: systemctl status postgresql
|
|
||||||
repos:
|
repos:
|
||||||
- https://kojipkgs.fedoraproject.org/compose/latest-Fedora-Modular-26/compose/Server/x86_64/os/
|
- http://mirror.vutbr.cz/fedora/releases/26/Everything/x86_64/os/
|
||||||
test:
|
|
||||||
process_running:
|
|
||||||
- |
|
|
||||||
up=0
|
|
||||||
for i in `seq 20`; do
|
|
||||||
echo "Checking for /usr/bin/postgres process... ($i)"
|
|
||||||
if ls /proc/*/exe -alh 2>/dev/null | grep /usr/bin/postgres; then
|
|
||||||
echo "Found."
|
|
||||||
up=1
|
|
||||||
break
|
|
||||||
else
|
|
||||||
sleep 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
test "$up" -ne 0
|
|
||||||
testhost:
|
|
||||||
db_usable:
|
|
||||||
- |
|
|
||||||
export PGPASSWORD=mtftest
|
|
||||||
PSQL="psql -h localhost -U mtftest -q"
|
|
||||||
up=0
|
|
||||||
for i in `seq 20`; do
|
|
||||||
echo "Pinging PostgreSQL ($i)"
|
|
||||||
if $PSQL -c "" >&/dev/null; then
|
|
||||||
up=1
|
|
||||||
break
|
|
||||||
else
|
|
||||||
sleep 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ "$up" -eq 1 ]; then
|
|
||||||
$PSQL -f test.sql | egrep "anything|something"
|
|
||||||
else
|
|
||||||
echo "Unable to connect to database." >&2
|
|
||||||
false
|
|
||||||
fi
|
|
||||||
|
|
|
||||||
56
tests/rpmvalidator.py
Normal file
56
tests/rpmvalidator.py
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# This Modularity Testing Framework helps you to write tests for modules
|
||||||
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# he Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
# Authors: Jan Scotka <jscotka@redhat.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
from avocado import main
|
||||||
|
from moduleframework import module_framework
|
||||||
|
|
||||||
|
|
||||||
|
class ExampleRpmValidation(module_framework.AvocadoTest):
|
||||||
|
"""
|
||||||
|
:avocado: enable
|
||||||
|
"""
|
||||||
|
fhs_base_paths = [
|
||||||
|
'/bin',
|
||||||
|
'/boot',
|
||||||
|
'/dev',
|
||||||
|
'/etc',
|
||||||
|
'/home',
|
||||||
|
'/lib',
|
||||||
|
'/lib64',
|
||||||
|
'/media',
|
||||||
|
'/mnt',
|
||||||
|
'/opt',
|
||||||
|
'/proc',
|
||||||
|
'/root',
|
||||||
|
'/run',
|
||||||
|
'/sbin',
|
||||||
|
'/sys',
|
||||||
|
'/srv',
|
||||||
|
'/tmp',
|
||||||
|
'/usr/bin'
|
||||||
|
]
|
||||||
|
|
||||||
|
def testPaths(self):
|
||||||
|
self.start()
|
||||||
|
for directory in self.fhs_base_paths:
|
||||||
|
self.run("test -d %s" % directory)
|
||||||
46
tests/sanity1.py
Normal file
46
tests/sanity1.py
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# This Modularity Testing Framework helps you to write tests for modules
|
||||||
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# he Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
# Authors: Rado Pitonak <rpitonak@redhat.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
from avocado import main
|
||||||
|
from avocado.core import exceptions
|
||||||
|
from moduleframework import module_framework
|
||||||
|
|
||||||
|
|
||||||
|
class SanityCheck1(module_framework.AvocadoTest):
|
||||||
|
"""
|
||||||
|
:avocado: enable
|
||||||
|
"""
|
||||||
|
|
||||||
|
def test1(self):
|
||||||
|
self.start()
|
||||||
|
self.run("ls / | grep bin")
|
||||||
|
|
||||||
|
# check if perl is installed in the right version.
|
||||||
|
def test2PostgresVersion(self):
|
||||||
|
postgresVersion = "9.6"
|
||||||
|
self.start()
|
||||||
|
self.run("postgres --version | grep " + postgresVersion)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
47
tests/sanity2.py
Normal file
47
tests/sanity2.py
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# This Modularity Testing Framework helps you to write tests for modules
|
||||||
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# he Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
# Authors: Rado Pitonak <rpitonak@redhat.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
from avocado import main
|
||||||
|
from avocado.core import exceptions
|
||||||
|
from moduleframework import module_framework
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
class SanityCheck2(module_framework.AvocadoTest):
|
||||||
|
"""
|
||||||
|
:avocado: enable
|
||||||
|
"""
|
||||||
|
|
||||||
|
def testConnectToDB(self):
|
||||||
|
self.start()
|
||||||
|
time.sleep(5)
|
||||||
|
self.run("psql -U $POSTGRESQL_USER -d $POSTGRESQL_DATABASE -c 'SELECT 1'")
|
||||||
|
|
||||||
|
def testCreateTable(self):
|
||||||
|
self.start()
|
||||||
|
time.sleep(5)
|
||||||
|
self.run("psql -U $POSTGRESQL_USER -d $POSTGRESQL_DATABASE -c 'CREATE TABLE mytable(ID INT PRIMARY KEY NOT NULL);'")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
47
tests/simpleTest.py
Normal file
47
tests/simpleTest.py
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# This Modularity Testing Framework helps you to write tests for modules
|
||||||
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# he Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
# Authors: Jan Scotka <jscotka@redhat.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
from moduleframework import module_framework
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
class simpleTests(module_framework.AvocadoTest):
|
||||||
|
"""
|
||||||
|
:avocado: enable
|
||||||
|
"""
|
||||||
|
|
||||||
|
def testPath(self):
|
||||||
|
print ">>>>>>>>>>>>>> ", module_framework.__file__
|
||||||
|
print ">>>>>>>>>>>>>> ", __file__
|
||||||
|
|
||||||
|
def testAssertIn(self):
|
||||||
|
self.start()
|
||||||
|
self.assertIn("sbin", self.run("ls /").stdout)
|
||||||
|
|
||||||
|
def testInsideModule(self):
|
||||||
|
self.start()
|
||||||
|
self.assertEqual("a", self.run("echo a").stdout.strip())
|
||||||
|
|
||||||
|
def testCommandOnHost(self):
|
||||||
|
self.start()
|
||||||
|
self.assertEqual("a", self.runHost("echo a").stdout.strip())
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
CREATE TABLE mtftest (id SERIAL NOT NULL, anything VARCHAR(255) NOT NULL);
|
|
||||||
|
|
||||||
INSERT INTO mtftest (anything) VALUES ('something');
|
|
||||||
|
|
||||||
SELECT anything FROM mtftest;
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue