summaryrefslogtreecommitdiff
path: root/python-docker-cluster-controller.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-docker-cluster-controller.spec')
-rw-r--r--python-docker-cluster-controller.spec338
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