diff options
author | CoprDistGit <infra@openeuler.org> | 2023-06-20 05:55:22 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-06-20 05:55:22 +0000 |
commit | 51ad9583569bcc0e937295adacc58bfdc6f3ea1a (patch) | |
tree | d6338140ec0565a6a35dd0b470a1152e941a4329 /python-docker-cluster-controller.spec | |
parent | 77dfe07154ed422e23367584f672ba3c40b24b61 (diff) |
automatic import of python-docker-cluster-controlleropeneuler20.03
Diffstat (limited to 'python-docker-cluster-controller.spec')
-rw-r--r-- | python-docker-cluster-controller.spec | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/python-docker-cluster-controller.spec b/python-docker-cluster-controller.spec new file mode 100644 index 0000000..0b6c81e --- /dev/null +++ b/python-docker-cluster-controller.spec @@ -0,0 +1,338 @@ +%global _empty_manifest_terminate_build 0 +Name: python-docker-cluster-controller +Version: 0.1.28 +Release: 1 +Summary: A simple Python class to orchestrate cluster nodes within a docker environment. +License: GNU GENERAL PUBLIC LICENSE +URL: https://github.com/erikdewildt/docker-cluster-controller +Source0: https://mirrors.aliyun.com/pypi/web/packages/cc/ce/303e92224d779b54b14515ed2e1b4787a5da745802e264175eec4d847fc3/docker-cluster-controller-0.1.28.tar.gz +BuildArch: noarch + +Requires: python3-Jinja2 +Requires: python3-etcd +Requires: python3-schedule +Requires: python3-sentry-sdk +Requires: python3-func-timeout + +%description +# Docker Cluster Controller + +This project provides a 'clustercontroller' package which can be used to create a docker-entrypoint. + +In complex docker swarm setups the order in which containers are started cannot be controlled (depends_on). When there +is a need to have different actions depening on boot order this has to be handled during initialisation of the +container. + +The clustercontroller package provides a class which can be used in a docker-entrypoint. + +In the docker-entrypoint multiprocessing is used through methods provided by the package to start two main processes: + +1. ClusterController process +2. The actual service the container needs to provide + +Both processes are registered and actively monitored. If one of both processes (unexpectedly) terminates the other +is gracefully terminated using terminate signals. + +The ClusterController registers the instance in ETCD and tries to aquire a master role. Depending on the boot order +of containers it will either get the master role or become slave. + +Depending on the role methods are executed during initialisation, during it's lifecycle any state transfer will also +call appropriate actions for handling these events. + +During startup of the controller 'scheduled' jobs can be registered for example to perform hourly actions. It is +important to only use multiprocessing task using the 'start_process' method within these time based methods to 'freeze' +any other processes. + + + +## Installation: + +pip install docker-cluster-controller + + +## Usage: + +1. Build a container with a docker-entrypoint using the clustercontroller. See the docker-entrypoint.py as and example implementation. +1. Start a ETCD Cluster, see [docker-service-discovery] +2. In the docker-compose file set environment variables so the clustercontroller knows where and how to register + +|Environment Variable |Description | +|---------------------|------------| +|ETCD_HOSTS |The hostnames of the ETCD node (comma seperated) | +|ETCD_PORT |The port of the ETCD node | +|PORTS_WHEN_ACTIVE | The port(s) when de service has become active (e.g. 80,443,8443) +|ENVIRONMENT: | A single ETCD node can be used for multimple environments, therefore the environment has to be specified. E.g. development'| +|SERVICE: |The name of the service | + +## Backup: + +To use the rotating backup functionality some environemnt variables have to be set: + +|Environment Variable |Description | +|---------------------|------------| +|BACKUP_HOURS_TO_KEEP=24 |The number of hourly backups to keep | +|BACKUP_DAYS_TO_KEEP=14 |The number of daily backups to keep | +|BACKUP_WEEKS_TO_KEEP=4 |The number of weekly backups to keep | +|BACKUP_MONTHS_TO_KEEP=3 |The number of monthly backups to keep | +|BACKUP_DESTINATION_FOLDER=backup |The backup destination folder | + +Within a scheduled method the backup can be called: + +```python + run_backup(name='myapp_backup', command=['backup_command', '-x', 'some_option', '-y', 'some_other_option']) +``` + + +## Filesystem locks + +When starting the controller a tuple with some file system paths can be specified. The controller then make sures a +lockfile is created for the current container in the path(s) specified. + +```python + self.filesystem_locks= ('backup', ) +``` + +The 'get_filesystem_lock' method will return True if the current container has a lock for the path or False if another +container has a lock in place. + +```python + self.get_filesystem_lock('backup') +``` + +[docker-service-discovery]: https://github.com/erikdewildt/docker-service-discovery + + + + +%package -n python3-docker-cluster-controller +Summary: A simple Python class to orchestrate cluster nodes within a docker environment. +Provides: python-docker-cluster-controller +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-docker-cluster-controller +# Docker Cluster Controller + +This project provides a 'clustercontroller' package which can be used to create a docker-entrypoint. + +In complex docker swarm setups the order in which containers are started cannot be controlled (depends_on). When there +is a need to have different actions depening on boot order this has to be handled during initialisation of the +container. + +The clustercontroller package provides a class which can be used in a docker-entrypoint. + +In the docker-entrypoint multiprocessing is used through methods provided by the package to start two main processes: + +1. ClusterController process +2. The actual service the container needs to provide + +Both processes are registered and actively monitored. If one of both processes (unexpectedly) terminates the other +is gracefully terminated using terminate signals. + +The ClusterController registers the instance in ETCD and tries to aquire a master role. Depending on the boot order +of containers it will either get the master role or become slave. + +Depending on the role methods are executed during initialisation, during it's lifecycle any state transfer will also +call appropriate actions for handling these events. + +During startup of the controller 'scheduled' jobs can be registered for example to perform hourly actions. It is +important to only use multiprocessing task using the 'start_process' method within these time based methods to 'freeze' +any other processes. + + + +## Installation: + +pip install docker-cluster-controller + + +## Usage: + +1. Build a container with a docker-entrypoint using the clustercontroller. See the docker-entrypoint.py as and example implementation. +1. Start a ETCD Cluster, see [docker-service-discovery] +2. In the docker-compose file set environment variables so the clustercontroller knows where and how to register + +|Environment Variable |Description | +|---------------------|------------| +|ETCD_HOSTS |The hostnames of the ETCD node (comma seperated) | +|ETCD_PORT |The port of the ETCD node | +|PORTS_WHEN_ACTIVE | The port(s) when de service has become active (e.g. 80,443,8443) +|ENVIRONMENT: | A single ETCD node can be used for multimple environments, therefore the environment has to be specified. E.g. development'| +|SERVICE: |The name of the service | + +## Backup: + +To use the rotating backup functionality some environemnt variables have to be set: + +|Environment Variable |Description | +|---------------------|------------| +|BACKUP_HOURS_TO_KEEP=24 |The number of hourly backups to keep | +|BACKUP_DAYS_TO_KEEP=14 |The number of daily backups to keep | +|BACKUP_WEEKS_TO_KEEP=4 |The number of weekly backups to keep | +|BACKUP_MONTHS_TO_KEEP=3 |The number of monthly backups to keep | +|BACKUP_DESTINATION_FOLDER=backup |The backup destination folder | + +Within a scheduled method the backup can be called: + +```python + run_backup(name='myapp_backup', command=['backup_command', '-x', 'some_option', '-y', 'some_other_option']) +``` + + +## Filesystem locks + +When starting the controller a tuple with some file system paths can be specified. The controller then make sures a +lockfile is created for the current container in the path(s) specified. + +```python + self.filesystem_locks= ('backup', ) +``` + +The 'get_filesystem_lock' method will return True if the current container has a lock for the path or False if another +container has a lock in place. + +```python + self.get_filesystem_lock('backup') +``` + +[docker-service-discovery]: https://github.com/erikdewildt/docker-service-discovery + + + + +%package help +Summary: Development documents and examples for docker-cluster-controller +Provides: python3-docker-cluster-controller-doc +%description help +# Docker Cluster Controller + +This project provides a 'clustercontroller' package which can be used to create a docker-entrypoint. + +In complex docker swarm setups the order in which containers are started cannot be controlled (depends_on). When there +is a need to have different actions depening on boot order this has to be handled during initialisation of the +container. + +The clustercontroller package provides a class which can be used in a docker-entrypoint. + +In the docker-entrypoint multiprocessing is used through methods provided by the package to start two main processes: + +1. ClusterController process +2. The actual service the container needs to provide + +Both processes are registered and actively monitored. If one of both processes (unexpectedly) terminates the other +is gracefully terminated using terminate signals. + +The ClusterController registers the instance in ETCD and tries to aquire a master role. Depending on the boot order +of containers it will either get the master role or become slave. + +Depending on the role methods are executed during initialisation, during it's lifecycle any state transfer will also +call appropriate actions for handling these events. + +During startup of the controller 'scheduled' jobs can be registered for example to perform hourly actions. It is +important to only use multiprocessing task using the 'start_process' method within these time based methods to 'freeze' +any other processes. + + + +## Installation: + +pip install docker-cluster-controller + + +## Usage: + +1. Build a container with a docker-entrypoint using the clustercontroller. See the docker-entrypoint.py as and example implementation. +1. Start a ETCD Cluster, see [docker-service-discovery] +2. In the docker-compose file set environment variables so the clustercontroller knows where and how to register + +|Environment Variable |Description | +|---------------------|------------| +|ETCD_HOSTS |The hostnames of the ETCD node (comma seperated) | +|ETCD_PORT |The port of the ETCD node | +|PORTS_WHEN_ACTIVE | The port(s) when de service has become active (e.g. 80,443,8443) +|ENVIRONMENT: | A single ETCD node can be used for multimple environments, therefore the environment has to be specified. E.g. development'| +|SERVICE: |The name of the service | + +## Backup: + +To use the rotating backup functionality some environemnt variables have to be set: + +|Environment Variable |Description | +|---------------------|------------| +|BACKUP_HOURS_TO_KEEP=24 |The number of hourly backups to keep | +|BACKUP_DAYS_TO_KEEP=14 |The number of daily backups to keep | +|BACKUP_WEEKS_TO_KEEP=4 |The number of weekly backups to keep | +|BACKUP_MONTHS_TO_KEEP=3 |The number of monthly backups to keep | +|BACKUP_DESTINATION_FOLDER=backup |The backup destination folder | + +Within a scheduled method the backup can be called: + +```python + run_backup(name='myapp_backup', command=['backup_command', '-x', 'some_option', '-y', 'some_other_option']) +``` + + +## Filesystem locks + +When starting the controller a tuple with some file system paths can be specified. The controller then make sures a +lockfile is created for the current container in the path(s) specified. + +```python + self.filesystem_locks= ('backup', ) +``` + +The 'get_filesystem_lock' method will return True if the current container has a lock for the path or False if another +container has a lock in place. + +```python + self.get_filesystem_lock('backup') +``` + +[docker-service-discovery]: https://github.com/erikdewildt/docker-service-discovery + + + + +%prep +%autosetup -n docker-cluster-controller-0.1.28 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-docker-cluster-controller -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1.28-1 +- Package Spec generated |