Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kanku for openSUSE:Factory checked in at 2022-10-14 15:41:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kanku (Old) and /work/SRC/openSUSE:Factory/.kanku.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kanku" Fri Oct 14 15:41:39 2022 rev:15 rq:1010421 version:0.13.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kanku/kanku.changes 2022-06-24 08:45:57.659182892 +0200 +++ /work/SRC/openSUSE:Factory/.kanku.new.2275/kanku.changes 2022-10-14 15:42:24.815905806 +0200 @@ -1,0 +2,28 @@ +Thu Oct 13 06:56:40 UTC 2022 - fschrei...@suse.com + +- Update to version 0.13.0: + * [doc] updated changelog ver: 0.13.0 + * [doc] updated release notes 0.13.0 + * [core] recreate queues named 'amq.*' without a dedicate queue name + * [core] refactored rabbmitmq handling in worker and dispatcher + * [handler] Reboot: new option 'login_timeout' to wait for console + * [dist] change copy in Makefile from '-av' to '-rv' + * [handler] SaltSSH: added multiple attributes + * [dist] changed 'cp -av' to 'cp -rv' + * [dist] added RELEASE-NOTES and CHANGELOG to spec file + * [doc] updated changelog + * [doc] updated release notes 0.12.7 + * [doc] updated release notes 0.12.6 + * [doc] updated release notes 0.12.5 + * [doc] updated release notes 0.12.4 + * [doc] updated release notes 0.12.3 + * [doc] updated release notes 0.12.2 + * [doc] updated release notes 0.12.1 + * [doc] updated release notes 0.12.0 + * [contrib] removed p2h - already in branch gh-pages-src + * [dist] added .statocles to .gitignore + * [dist] removed kanku-web.log from default logging conf + * [dist] remove logrotate config - now done with journald + * [cli] ssh: new parameter --x11_forward/-X to enable ssh x11 forwarding + +------------------------------------------------------------------- Old: ---- kanku-0.12.7.tar.xz New: ---- kanku-0.13.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kanku.spec ++++++ --- /var/tmp/diff_new_pack.nJrP5M/_old 2022-10-14 15:42:25.567907061 +0200 +++ /var/tmp/diff_new_pack.nJrP5M/_new 2022-10-14 15:42:25.571907068 +0200 @@ -22,7 +22,7 @@ Name: kanku # Version gets set by obs-service-tar_scm -Version: 0.12.7 +Version: 0.13.0 Release: 0 License: GPL-3.0-only Summary: Development and continuous integration @@ -173,7 +173,6 @@ # but perl-DBD-SQLite-Amalgamation is breaks with SQL syntax errors # at job_histroy_sub table Requires: perl-DBD-SQLite -Requires: logrotate Requires: perl(Archive::Cpio) Requires: perl(LWP::Protocol::https) Requires: perl(Mail::Sendmail) @@ -193,7 +192,7 @@ %tmpfiles_create %_tmpfilesdir/kanku.conf %files common -%doc README.md RELEASE-NOTES-0.11.0.md RELEASE-NOTES-0.12.0.md +%doc README.md RELEASE-NOTES-*.md CHANGELOG.md %dir /usr/lib/kanku %dir /usr/lib/kanku/lib @@ -245,9 +244,6 @@ %exclude %dir /etc/profile.d %config /etc/profile.d/kanku.sh -%exclude %dir /etc/logrotate.d/ -%config /etc/logrotate.d/kanku-common - %exclude %dir %_tmpfilesdir %_tmpfilesdir/kanku.conf @@ -347,7 +343,6 @@ %files common-server %defattr(-, root, root) -%dir %attr(755, kankurun, kanku) /var/log/kanku %dir %attr(755, kankurun, kanku) /var/lib/kanku %dir %attr(755, kankurun, kanku) /var/lib/kanku/db %dir %attr(755, kankurun, kanku) /var/cache/kanku ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.nJrP5M/_old 2022-10-14 15:42:25.623907155 +0200 +++ /var/tmp/diff_new_pack.nJrP5M/_new 2022-10-14 15:42:25.627907161 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/M0ses/kanku.git</param> - <param name="changesrevision">fcf4fb2700c14072942d14ddb54c48fe0814a0b8</param></service></servicedata> + <param name="changesrevision">b078f23cfb1a421ab19c4573b94b1c20c174cfd1</param></service></servicedata> (No newline at EOF) ++++++ debian.changelog ++++++ --- /var/tmp/diff_new_pack.nJrP5M/_old 2022-10-14 15:42:25.647907195 +0200 +++ /var/tmp/diff_new_pack.nJrP5M/_new 2022-10-14 15:42:25.651907201 +0200 @@ -1,4 +1,4 @@ -kanku (0.12.7-0) UNRELEASED; urgency=medium +kanku (0.13.0-0) UNRELEASED; urgency=medium * updated to upstream version 0.10.1 ++++++ debian.dsc ++++++ --- /var/tmp/diff_new_pack.nJrP5M/_old 2022-10-14 15:42:25.695907275 +0200 +++ /var/tmp/diff_new_pack.nJrP5M/_new 2022-10-14 15:42:25.699907281 +0200 @@ -2,7 +2,7 @@ Source: kanku Binary: kanku Architecture: any -Version: 0.12.7 +Version: 0.13.0 Maintainer: Frank Schreiner <fschrei...@suse.de> Standards-Version: 3.8.2 Homepage: https://github.com/M0ses/kanku ++++++ kanku-0.12.7.tar.xz -> kanku-0.13.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/.gitignore new/kanku-0.13.0/.gitignore --- old/kanku-0.12.7/.gitignore 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/.gitignore 2022-10-13 08:53:11.000000000 +0200 @@ -26,3 +26,4 @@ .perlcritic.cache etc/rabbit.yml KankuFile.examples/rockrobo +.statocles diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/CHANGELOG.md new/kanku-0.13.0/CHANGELOG.md --- old/kanku-0.12.7/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/CHANGELOG.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,119 @@ +# [0.13.0] - 2022-10-10 + +## FEATURES + +* [core] refactored rabbmitmq handling in worker and dispatcher +* [handler] Reboot: new option 'login_timeout' to wait for console +* [handler] SaltSSH: added multiple attributes +* [dist] removed kanku-web.log from default logging conf +* [dist] remove logrotate config - now done with journald +* [cli] ssh: new parameter --x11_forward/-X to enable ssh x11 forwarding + + +# [0.12.7] - 2022-06-23 + +## BUGFIXES + +* [handler] K:H:GIT - fixed gituser/gitpass handling +* [cli] up: fixed special job `__ALL__` + + +# [0.12.6] - 2022-06-22 + +## FEATURES + +* [cli] up: new special job `__ALL__` where a sequence of jobs can be defined in an array +* [cli] up: multiple jobs can now be specified as options +* [handler] new Kanku::Handler::CopyProfile + + +# [0.12.5] - 2022-06-03 + +## FEATURES + +* [cli] up: new alias for ```--skip_check_domain``` -> ```-S``` +* [cli] ssh: new option ```--agent_forward | -A``` +* [cli] up: new option ```--skip_check_domain | -S``` +* [util] limit `use cache=unsafe` to vmdk images - speed improvement for other images +* [dist] fixed order of iptables rules when using multiple networks (server mode) +* [handler] SetupNetwork: changed get_ipaddress to console + + +# [0.12.4] - 2022-05-06 + +## BUGFIXES + +* [util] improve vmdk performance (`cache=unsafe` in libvirt disk driver) +* [web] fixed 'To Top'-button + + +# [0.12.3] - 2022-03-14 + +## FEATURES + +* [cli] check_configs command now also check job_group configs + + +## BUGFIXES + +* [web] fix outdated cached settings in 'Job Groups' +* [core] #boo 1196604 - wrapper scripts for iptables/ss/netstat +* [dist] change default logging to stderr/journald +* [util] VM::Image - use new buffer size while uncompressing +* [urlwrapper] fixed x-scheme-handler_kanku +* [handler] central config for host_interfaces for PortForward +* [web] job groups config changes are now detected in web ui + + +# [0.12.2] - 2022-02-18 + +## BUGFIXES + +* [web] guest page - filter iptable rules by domain name + + +# [0.12.1] - 2022-02-16 + +## FEATURES + +* [dist] new systemd service kanku-iptables for master server + + +# [0.12.0] - 2022-02-09 + +## FEATURES + +* [web] + * new switch autostart to create persistent VM's + * added login route (for GET method) +* [cli] + * new command `kanku snapshot ...` + * new options for `kanku ssh ...`: + * `--ipaddress` to specify the ip address of the VM (alias `-i`) + * `--execute` to execute a single command via ssh (alias `-e`) + * use ssh_user from KankuFile for ssh command + * new option: `--log_file/--log_stdout` for VM related commands + * Suggest running ssh-add on auth fauilure when auth_type is 'agent' + + +## BUGFIXES + +* [web] + * fix 'show only latest' in job history +* [core] + * no_wait_for_bootloader for ExecuteCommandsViaConsole to avoid waiting for bootloader + * Fix ssh key filename: id_ecdsa.pub_sk -> id_ecdsa_sk.pub + * various cleanups to avoid 'uninitialized value' +* [dist] + * fix tabs in default config template setup/kanku-config.yml.tt2 + * K:H:PrepareSSH: fix permissions for user kanku + * K:H:CleanupIPTables: cleanup unused packages +* [util] + * set default for running_remotely in VM to 0 +* [examples] updated configs + * updated to current opensuse + * deleted broken examples + * updated centos to latest version + * renamed centos -> centos-current + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/Makefile new/kanku-0.13.0/Makefile --- old/kanku-0.12.7/Makefile 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/Makefile 2022-10-13 08:53:11.000000000 +0200 @@ -48,7 +48,6 @@ install -m 644 etc/templates/default-vm.tt2.$(ARCH) $(DESTDIR)/etc/kanku/templates/default-vm.tt2 install: install_dirs install_full_dirs install_services install_docs configs public views bashcomp urlwrapper install_arch_templates - install -m 644 ./dist/kanku.logrotate $(DESTDIR)/etc/logrotate.d/kanku-common install -m 644 dist/profile.d-kanku.sh $(DESTDIR)/etc/profile.d/kanku.sh install -m 644 dist/tmpfiles.d-kanku $(DESTDIR)/usr/lib/tmpfiles.d/kanku.conf install -m 644 dist/_etc_apache2_conf.d_kanku-worker.conf $(DESTDIR)/etc/apache2/conf.d/kanku-worker.conf @@ -63,7 +62,7 @@ done # for i in $(CONFIG_FILES);do \ - cp -av ./etc/$$i $(DESTDIR)/etc/kanku/$$i ;\ + cp -rv ./etc/$$i $(DESTDIR)/etc/kanku/$$i ;\ done install_full_dirs: lib dbfiles public views bin sbin @@ -82,21 +81,20 @@ install -m 755 sbin/kanku-triggerd $(DESTDIR)/usr/sbin/kanku-triggerd public: - cp -av public $(DESTDIR)/usr/share/kanku/ + cp -rv public $(DESTDIR)/usr/share/kanku/ views: - cp -av views $(DESTDIR)/usr/share/kanku/ + cp -rv views $(DESTDIR)/usr/share/kanku/ dbfiles: - cp -av share/migrations $(DESTDIR)/usr/share/kanku/ - cp -av share/fixtures $(DESTDIR)/usr/share/kanku/ + cp -rv share/migrations $(DESTDIR)/usr/share/kanku/ + cp -rv share/fixtures $(DESTDIR)/usr/share/kanku/ lib: - cp -av ./lib/ $(DESTDIR)/usr/lib/kanku/ + cp -rv ./lib/ $(DESTDIR)/usr/lib/kanku/ install_dirs: [ -d $(DESTDIR)/etc/bash_completion.d/ ] || mkdir -p $(DESTDIR)/etc/bash_completion.d/ - [ -d $(DESTDIR)/etc/logrotate.d/ ] || mkdir -p $(DESTDIR)/etc/logrotate.d/ [ -d $(DESTDIR)/etc/apache2/conf.d ] || mkdir -p $(DESTDIR)/etc/apache2/conf.d [ -d $(DESTDIR)/etc/profile.d ] || mkdir -p $(DESTDIR)/etc/profile.d [ -d $(DESTDIR)/etc/kanku ] || mkdir -p $(DESTDIR)/etc/kanku diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.0.md new/kanku-0.13.0/RELEASE-NOTES-0.12.0.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.0.md 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.0.md 2022-10-13 08:53:11.000000000 +0200 @@ -1,21 +1,21 @@ -# Release 0.12.0 +# RELEASE 0.12.0 -## New Featues +## FEATURES * [web] * new switch autostart to create persistent VM's * added login route (for GET method) * [cli] - * new commands "kanku snapshot ..." - * new options for "kanku ssh ..." - * --ipaddress to specify the ip address of the VM - * --execute to execute a single command via ssh + * new command `kanku snapshot ...` + * new options for `kanku ssh ...`: + * `--ipaddress` to specify the ip address of the VM (alias `-i`) + * `--execute` to execute a single command via ssh (alias `-e`) * use ssh_user from KankuFile for ssh command - * new options `--log_file/--log_stdout` for VM related commands + * new option: `--log_file/--log_stdout` for VM related commands * Suggest running ssh-add on auth fauilure when auth_type is 'agent' -## Bugfixes +## BUGFIXES * [web] * fix 'show only latest' in job history @@ -25,16 +25,25 @@ * various cleanups to avoid 'uninitialized value' * [dist] * fix tabs in default config template setup/kanku-config.yml.tt2 -* [handler] - * fix permissions for user kanku in PrepareSSH - * cleanup unused packages in CleanupIPTable -* [util] set default for running_remotely in VM to 0 + * K:H:PrepareSSH: fix permissions for user kanku + * K:H:CleanupIPTables: cleanup unused packages +* [util] + * set default for running_remotely in VM to 0 +* [examples] updated configs + * updated to current opensuse + * deleted broken examples + * updated centos to latest version + * renamed centos -> centos-current -## Example Configs - -* updated to current opensuse -* deleted broken examples -* updated centos to latest version -* renamed centos -> centos-current + +## EXAMPLES + +This release containes a full functional version of the "Kanku VM Autostart" feature for kanku clusters. + +* Restart VMs +* Restore VMs iptable rules + +![Screenshot Autostart Domain](img/kanku_screenshot-feature-autostart_domain.png) + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.1.md new/kanku-0.13.0/RELEASE-NOTES-0.12.1.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.1.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.1.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,8 @@ +# RELEASE 0.12.1 + +## FEATURES + +* [dist] new systemd service kanku-iptables for master server + + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.2.md new/kanku-0.13.0/RELEASE-NOTES-0.12.2.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.2.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.2.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,8 @@ +# RELEASE 0.12.2 + +## BUGFIXES + +* [web] guest page - filter iptable rules by domain name + + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.3.md new/kanku-0.13.0/RELEASE-NOTES-0.12.3.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.3.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.3.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,29 @@ +# RELEASE 0.12.3 + + +## ATTENTION: + +because instead of using iptables/ss/netstat directly we now use +wrapper scripts with need to be added to the sudoers file. + +If you run kanku in developer mode you should re-run + +```kanku setup --devel``` + +## FEATURES + +* [cli] check_configs command now also check job_group configs + + +## BUGFIXES + +* [web] fix outdated cached settings in 'Job Groups' +* [core] #boo 1196604 - wrapper scripts for iptables/ss/netstat +* [dist] change default logging to stderr/journald +* [util] VM::Image - use new buffer size while uncompressing +* [urlwrapper] fixed x-scheme-handler_kanku +* [handler] central config for host_interfaces for PortForward +* [web] job groups config changes are now detected in web ui + + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.4.md new/kanku-0.13.0/RELEASE-NOTES-0.12.4.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.4.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.4.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,9 @@ +# RELEASE 0.12.4 + +## BUGFIXES + +* [util] improve vmdk performance (`cache=unsafe` in libvirt disk driver) +* [web] fixed 'To Top'-button + + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.5.md new/kanku-0.13.0/RELEASE-NOTES-0.12.5.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.5.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.5.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,13 @@ +# RELEASE 0.12.5 + +## FEATURES + +* [cli] up: new alias for ```--skip_check_domain``` -> ```-S``` +* [cli] ssh: new option ```--agent_forward | -A``` +* [cli] up: new option ```--skip_check_domain | -S``` +* [util] limit `use cache=unsafe` to vmdk images - speed improvement for other images +* [dist] fixed order of iptables rules when using multiple networks (server mode) +* [handler] SetupNetwork: changed get_ipaddress to console + + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.6.md new/kanku-0.13.0/RELEASE-NOTES-0.12.6.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.6.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.6.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,99 @@ +# RELEASE 0.12.6 + +## FEATURES + +* [cli] up: new special job `__ALL__` where a sequence of jobs can be defined in an array +* [cli] up: multiple jobs can now be specified as options +* [handler] new Kanku::Handler::CopyProfile + + + +## EXAMPLES + +#### CLI: up - special configuration `__ALL__` + +In KankuFile: + + + domain_name: saltmaster + default_job: saltmaster + + jobs: + __ALL__: + - clean + - saltmaster + - admin-hosts + - service-servers + ... + clean: + ... + saltmaster: + ... + service-servers: + ... + ... + + +On the cli: + +```kanku up -j __ALL__ -S``` + +#### CLI: up - specify multiple jobs in one command line + +```kanku up -j job1 -j job2``` + +#### Handler: Kanku::Handler::CopyProfile + +To use this Handler you need a configuration section in your +~/.kanku/kanku-config.yml like the following to specify the commands +which should be executed + + + Kanku::Handler::CopyProfile: + user: kanku + tasks: + - cmd: cp + src: ~/.gitconfig + - cmd: cp + src: ~/.vimrc + - cmd: cp + src: ~/.vim/ + recursive: 1 + - cmd: mkdir + path: ~/.config/ + - cmd: cp + src: ~/.config/osc/ + dst: ~/.config/osc/ + recursive: 1 + - cmd: chown + owner: kanku:users + recursive: 1 + path: ~/.config/ + - cmd: chmod + mode: 700 + path: ~/.config/ + + +And you need an entry in your KankuFile job, where you can specify the users +for which this profile should be copied. + + + jobs: + default_job: + ... + - + use_module: Kanku::Handler::CopyProfile + options: + users: + - root + - kanku + + + ATM the following commands (cmd) are available:``` + + * mkdir + * cp + * chmod + * chown + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.12.7.md new/kanku-0.13.0/RELEASE-NOTES-0.12.7.md --- old/kanku-0.12.7/RELEASE-NOTES-0.12.7.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.12.7.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,9 @@ +# RELEASE 0.12.7 + +## BUGFIXES + +* [handler] K:H:GIT - fixed gituser/gitpass handling +* [cli] up: fixed special job `__ALL__` + + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/RELEASE-NOTES-0.13.0.md new/kanku-0.13.0/RELEASE-NOTES-0.13.0.md --- old/kanku-0.12.7/RELEASE-NOTES-0.13.0.md 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.13.0/RELEASE-NOTES-0.13.0.md 2022-10-13 08:53:11.000000000 +0200 @@ -0,0 +1,18 @@ +# RELEASE 0.13.0 + +## FEATURES + +* [core] refactored rabbmitmq handling in worker and dispatcher +* [handler] Reboot: new option 'login_timeout' to wait for console +* [handler] SaltSSH: added multiple attributes +* [dist] removed kanku-web.log from default logging conf +* [dist] remove logrotate config - now done with journald +* [cli] ssh: new parameter --x11_forward/-X to enable ssh x11 forwarding + + + +<h3>Examples</h3> +<h4>X-Forwarding for `kanku ssh`</h4> +<code>kanku ssh -X</code> + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/contrib/p2h new/kanku-0.13.0/contrib/p2h --- old/kanku-0.12.7/contrib/p2h 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/contrib/p2h 1970-01-01 01:00:00.000000000 +0100 @@ -1,77 +0,0 @@ -#!/usr/bin/perl -# -# This file is part of Pod-Markdown -# -# This software is copyright (c) 2011 by Randy Stauner. -# -# This is free software; you can redistribute it and/or modify it under -# the same terms as the Perl 5 programming language system itself. -# -use 5.008; -use strict; -use warnings; -# PODNAME: pod2markdown -# ABSTRACT: Convert POD text to Markdown - -my $debuglevel = 9; -use Pod::Simple::Debug (\$debuglevel, 0); -use Pod::Simple::HTML; -use FindBin; -use File::Find; -use File::Path qw(make_path remove_tree); -use File::Basename; -use Data::Dumper; -use URI::Escape; - -my %opts = ( - output_encoding => 'UTF-8', - perldoc_url_prefix => './', -); - -my $outdir = "$FindBin::Bin/../pod"; -my $indir = "$FindBin::Bin/../lib/"; - -my %files; -my %podhtml_LOT; - -find({wanted => sub { - - if ( $File::Find::name =~ m#$indir([^.].*)[.](pm|pod)# ) { - my $p = $1; - my $f = "$1.$2"; - $p =~ s#/#::#g; - $files{$p} = $f; - my $h = uri_escape($p); - $podhtml_LOT{$p} = "./$h.html"; -}}}, $indir); - -remove_tree($outdir); - -while (my ($package, $file) = each %files) { - my $of = "$outdir/$package.html"; - my $od = dirname($of); - -d $od || make_path($od); - - convert("$indir/$file", $of); -} - -exit 0; - -sub convert { - my ($in_file, $out_file) = @_; - my $p = Pod::Simple::HTML->new; - $p->{podhtml_LOT} = \%podhtml_LOT; - my $html; - $p->output_string(\$html); - $p->parse_file($in_file); - if ($html) { - print "$out_file\n"; - my $of; - open($of, '>', $out_file) || die "Could not open $of: $!\n"; - binmode $of, ':bytes'; - print $of $html; - close $of; - } -} - -__END__ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/dist/kanku.logrotate new/kanku-0.13.0/dist/kanku.logrotate --- old/kanku-0.12.7/dist/kanku.logrotate 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/dist/kanku.logrotate 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -/var/log/kanku/kanku.log -/var/log/kanku/kanku-web.log -{ - daily - rotate 7 - copytruncate - missingok -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/dist/kanku.spec new/kanku-0.13.0/dist/kanku.spec --- old/kanku-0.12.7/dist/kanku.spec 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/dist/kanku.spec 2022-10-13 08:53:11.000000000 +0200 @@ -173,7 +173,6 @@ # but perl-DBD-SQLite-Amalgamation is breaks with SQL syntax errors # at job_histroy_sub table Requires: perl-DBD-SQLite -Requires: logrotate Requires: perl(Archive::Cpio) Requires: perl(LWP::Protocol::https) Requires: perl(Mail::Sendmail) @@ -193,7 +192,7 @@ %tmpfiles_create %_tmpfilesdir/kanku.conf %files common -%doc README.md RELEASE-NOTES-0.11.0.md RELEASE-NOTES-0.12.0.md +%doc README.md RELEASE-NOTES-*.md CHANGELOG.md %dir /usr/lib/kanku %dir /usr/lib/kanku/lib @@ -245,9 +244,6 @@ %exclude %dir /etc/profile.d %config /etc/profile.d/kanku.sh -%exclude %dir /etc/logrotate.d/ -%config /etc/logrotate.d/kanku-common - %exclude %dir %_tmpfilesdir %_tmpfilesdir/kanku.conf @@ -347,7 +343,6 @@ %files common-server %defattr(-, root, root) -%dir %attr(755, kankurun, kanku) /var/log/kanku %dir %attr(755, kankurun, kanku) /var/lib/kanku %dir %attr(755, kankurun, kanku) /var/lib/kanku/db %dir %attr(755, kankurun, kanku) /var/cache/kanku diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/etc/logging/default.conf new/kanku-0.13.0/etc/logging/default.conf --- old/kanku-0.12.7/etc/logging/default.conf 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/etc/logging/default.conf 2022-10-13 08:53:11.000000000 +0200 @@ -4,11 +4,3 @@ log4perl.appender.LOGFILE.stderr = 1 log4perl.appender.LOGFILE.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.LOGFILE.layout.ConversionPattern = %C %L - %m%n - - -log4perl.category.WebUI = DEBUG, WebUILog -log4perl.appender.WebUILog=Log::Log4perl::Appender::File -log4perl.appender.WebUILog.filename=/var/log/kanku/kanku-web.log -log4perl.appender.WebUILog.mode=append -log4perl.appender.WebUILog.layout=PatternLayout -log4perl.appender.WebUILog.layout.ConversionPattern=[%d] %F %L - %m%n diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Cli/ssh.pm new/kanku-0.13.0/lib/Kanku/Cli/ssh.pm --- old/kanku-0.12.7/lib/Kanku/Cli/ssh.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Cli/ssh.pm 2022-10-13 08:53:11.000000000 +0200 @@ -66,35 +66,39 @@ documentation => 'allow ssh agent forwarding', ); +option 'x11_forward' => ( + isa => 'Bool', + is => 'rw', + cmd_aliases => 'X', + documentation => 'allow X11 forwarding', +); + sub run { my ($self) = @_; my $cfg = $self->cfg; - my $vm = Kanku::Util::VM->new( - domain_name => $self->domain_name, - management_network => $cfg->config->{management_network} || q{} - ); - my $state = $vm->state; - - if ( $state eq 'on' ) { - my $ip = $self->ipaddress || $cfg->config->{ipaddress} || $vm->get_ipaddress; - my $user = $self->user; - my $cmd = $self->execute || q{}; - - $self->ipaddress($ip); - $self->username($user); - $self->job(Kanku::Job->new()); - $self->connect(); - my $A = ($self->agent_forward) ? q{-A} : q{}; - system "ssh $A -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -l $user $ip $cmd"; - exit 0; - } elsif ($state eq 'off') { - $self->logger->warn('VM is off - use \'kanku startvm\' to start VM and try again'); - exit 1; - } else { - $self->logger->fatal('No VM found or VM in state \'unknown\''); - exit 2; + my $user = $self->user; + my $ip = $self->ipaddress; + my $A = ($self->agent_forward) ? q{-A} : q{}; + my $X = ($self->x11_forward) ? q{-X} : q{}; + my $cmd = $self->execute || q{}; + if (!$ip) { + my $vm = Kanku::Util::VM->new( + domain_name => $self->domain_name, + management_network => $cfg->config->{management_network} || q{} + ); + my $state = $vm->state; + if ( $state eq 'on' ) { + $ip = $cfg->config->{ipaddress} || $vm->get_ipaddress; + } elsif ($state eq 'off') { + $self->logger->warn('VM is off - use \'kanku startvm\' to start VM and try again'); + exit 1; + } else { + $self->logger->fatal('No VM found or VM in state \'unknown\''); + exit 2; + } } - + system "ssh $A $X -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -l $user $ip $cmd"; + exit 0; } __PACKAGE__->meta->make_immutable; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Daemon/Worker.pm new/kanku-0.13.0/lib/Kanku/Daemon/Worker.pm --- old/kanku-0.12.7/lib/Kanku/Daemon/Worker.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Daemon/Worker.pm 2022-10-13 08:53:11.000000000 +0200 @@ -34,9 +34,8 @@ , default => sub {uuid()}); has kmq => (is=>'rw', isa => 'Object'); -has job_queue_name => (is=>'rw', isa => 'Str'); -has remote_job_queue_name => (is=>'rw', isa => 'Str'); -has local_job_queue_name => (is=>'rw', isa => 'Str'); +has remote_key_name => (is=>'rw', isa => 'Str'); +has local_key_name => (is=>'rw', isa => 'Str'); has hostname => (is=>'rw', isa => 'Str', @@ -71,9 +70,8 @@ if (! $pid ) { my $hn = $self->hostname; - $self->local_job_queue_name($hn) if ($hn); + $self->local_key_name($hn) if ($hn); $self->listen_on_queue( - queue_name => "worker-to_all_hosts-". $self->worker_id, routing_key => 'kanku.to_all_hosts', ); } else { @@ -85,7 +83,6 @@ if (! $pid ) { $self->listen_on_queue( - queue_name => "worker-to_all_workers-" . $self->worker_id, routing_key => 'kanku.to_all_workers' ); } else { @@ -128,11 +125,10 @@ $kmq = Kanku::RabbitMQ->new(%{$rabbit_config}); $kmq->shutdown_file($self->shutdown_file); $kmq->connect(); - my $qn = $kmq->create_queue( - queue_name => $opts{queue_name}, + $kmq->create_queue( routing_key => $opts{routing_key}, ); - $self->local_job_queue_name($qn); + $self->local_key_name($opts{routing_key}); } catch { $logger->error("Could not create queue for exchange $opts{exchange_name}: $_"); }; @@ -157,18 +153,19 @@ my $answer = { action => 'task_confirmation', task_id => $data->{task_id}, - # answer_queue is needed on dispatcher side + # answer_key is needed on dispatcher side # to distinguish the results per worker host - answer_queue => $self->local_job_queue_name + answer_key => $self->local_key_name }; - $self->remote_job_queue_name($data->{answer_queue}); + $logger->debug($self->dump_it($data)); + $self->remote_key_name($data->{answer_key}); $kmq->publish( - $self->remote_job_queue_name, + $self->remote_key_name, encode_json($answer), ); $self->handle_task($data,$kmq); - $self->remote_job_queue_name(''); + $self->remote_key_name(''); } elsif ( $data->{action} eq 'advertise_job' ) { my @seen_already = grep { $data->{job_id} == $_ } @seen; if (! @seen_already) { @@ -217,18 +214,17 @@ my $logger = $self->logger(); $logger->debug("Starting to handle advertisement"); - $logger->trace("\$data = ".$self->dump_it($data)); - if ( $data->{answer_queue} ) { - $self->remote_job_queue_name($data->{answer_queue}); + if ( $data->{answer_key} ) { + $logger->debug("\$data = ".$self->dump_it($data)); + $self->remote_key_name($data->{answer_key}); my $job_id = $data->{job_id}; - $self->local_job_queue_name("job-$job_id-".$self->worker_id); + $self->local_key_name("job-$job_id-".$self->worker_id); my $answer = "Process '$$' is applying for job '$job_id'"; my $job_kmq = Kanku::RabbitMQ->new( %{$kmq->connect_info}, - queue_name => $self->local_job_queue_name, - routing_key => $self->local_job_queue_name, + routing_key => $self->local_key_name, ); $job_kmq->connect(); $job_kmq->create_queue(); @@ -238,16 +234,16 @@ message => $answer , worker_fqhn => hostfqdn(), worker_pid => $$, - answer_queue => $self->local_job_queue_name, + answer_key => $self->local_key_name, resources => collect_resources(), action => 'apply_for_job' }; - $logger->debug("Sending application for job_id $job_id on queue ".$self->remote_job_queue_name); + $logger->debug("Sending application for job_id $job_id with routing_key ".$self->remote_key_name); $logger->trace("\$application =".$self->dump_it($application)); my $json = encode_json($application); $kmq->publish( - $self->remote_job_queue_name, + $self->remote_key_name, $json, ); @@ -258,15 +254,15 @@ if ( $msg ) { my $body = decode_json($msg->{body}); if ( $body->{action} eq 'offer_job' ) { - $logger->info("Starting with job "); + $logger->info("Starting with job ".$job_id); $logger->trace("\$msg =".$self->dump_it($msg)); $logger->trace("\$body =".$self->dump_it($body)); $self->handle_job($job_id,$job_kmq); } elsif ( $body->{action} eq 'decline_application' ) { $logger->debug("Nothing to do - application declined"); - $self->remote_job_queue_name(''); - $self->local_job_queue_name(''); + $self->remote_key_name(''); + $self->local_key_name(''); return; } else { $logger->error("Answer on application for job $job_id unknown"); @@ -298,10 +294,10 @@ job_id => $job_id, }; - $logger->info("Sending 'aborted_job' because of TERM signal to '".$self->remote_job_queue_name); + $logger->info("Sending 'aborted_job' because of TERM signal to routing_key'".$self->remote_key_name); $job_kmq->publish( - $self->remote_job_queue_name, + $self->remote_key_name, encode_json($answer), ); @@ -309,8 +305,11 @@ }; try { + my $task_wait = 10000; + $logger->debug("Waiting $task_wait msec for tasks on queue: ".$job_kmq->queue_name." with routing_key: ".$job_kmq->routing_key); while (1){ - my $task_msg = $job_kmq->recv(10000); + my $task_msg = $job_kmq->recv($task_wait); + $logger->debug("ping"); if ( $self->detect_shutdown ) { my $answer = { action => 'aborted_job', @@ -318,10 +317,10 @@ job_id => $job_id, }; - $logger->info("Sending action 'aborted_job' because of daemon shutdown to '".$self->remote_job_queue_name); + $logger->info("Sending action 'aborted_job' because of daemon shutdown to routing_key '".$self->remote_key_name."'"); $job_kmq->publish( - $self->remote_job_queue_name, + $self->remote_key_name, encode_json($answer), ); @@ -358,7 +357,7 @@ $logger->error($e); $job_kmq->publish( - $self->remote_job_queue_name, + $self->remote_key_name, encode_json({ action => 'finished_task', error_message => $e @@ -399,6 +398,7 @@ error_message => $_ }; }; + $self->logger->debug("XXXXX ".$job_kmq->routing_key.", $job, $result"); $self->_send_task_result($job_kmq, $job, $result); return; } @@ -407,22 +407,22 @@ my ($self, $job_kmq, $job, $result) = @_; my $logger = $self->logger; - $logger->debug("Sending task result (state: $result->{state}) to ".$self->remote_job_queue_name); + $logger->debug("Sending task result (state: $result->{state}) to ".$self->remote_key_name." ROUTINGKEY: ".$job_kmq->routing_key); $result->{result} = encode_base64($result->{result}) if ($result->{result}); my $answer = { action => 'finished_task', result => $result, - answer_queue => $self->local_job_queue_name,, + answer_key => $self->local_key_name, job => $job->to_json }; - $logger->trace("\$answer = ".$self->dump_it($answer)); + $logger->debug("\$answer = ".$self->dump_it($answer)); $job_kmq->publish( - $self->remote_job_queue_name, + $self->remote_key_name, encode_json($answer), ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Dispatch/RabbitMQ.pm new/kanku-0.13.0/lib/Kanku/Dispatch/RabbitMQ.pm --- old/kanku-0.12.7/lib/Kanku/Dispatch/RabbitMQ.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Dispatch/RabbitMQ.pm 2022-10-13 08:53:11.000000000 +0200 @@ -49,6 +49,10 @@ has job_queue => (is=>'rw',isa=>'Object'); +has job_remote_routing_key => (is=>'rw', isa=>'Str'); + +has job_local_routing_key => (is=>'rw', isa=>'Str'); + has wait_for_workers => (is=>'ro',isa=>'Int',default=>1); has config => ( @@ -96,7 +100,6 @@ my $rmq = Kanku::RabbitMQ->new(%{$self->rabbit_config}); $rmq->shutdown_file($self->shutdown_file); $rmq->connect() || die "Could not connect to rabbitmq\n"; - $rmq->queue_name("dispatcher"); $rmq->create_queue(routing_key=>'kanku.to_dispatcher'); while (1) { my $msg = $rmq->recv(1000); @@ -208,7 +211,7 @@ }); my $logger = $self->logger(); - my $queue = "job-queue-".$job->id; + $self->job_local_routing_key("kanku.job-".$job->id); # job definition should be parsed before advertising job # if no valid job definition it should not be advertised @@ -218,8 +221,7 @@ my $rmq = Kanku::RabbitMQ->new(%{$self->rabbit_config}); $rmq->shutdown_file($self->shutdown_file); $rmq->connect() || die "Could not connect to rabbitmq\n"; - $rmq->queue_name($queue); - $rmq->create_queue(routing_key=>$queue); + $rmq->create_queue(routing_key=>$self->job_local_routing_key); $self->job_queue($rmq); my $applications={};; @@ -228,7 +230,7 @@ $applications = $self->advertise_job( $rmq, { - answer_queue => $queue, + answer_key => $self->job_local_routing_key, job_id => $job->id, arch => $job_definition->{arch} || 'x86_64', } @@ -240,11 +242,11 @@ $logger->trace("List of all applications:\n" . $self->dump_it($applications)); # pa = prefered_application - my ($pa,$declined_applications) = $self->score_applications($applications); + my ($pa, $declined_applications) = $self->score_applications($applications); $self->decline_applications($declined_applications); - my $result = $self->send_job_offer($rmq,$pa); + my $result = $self->send_job_offer($rmq, $pa); $self->notify_queue->send({ type => 'job_change', @@ -254,11 +256,11 @@ id => $job->id }); - my $aq = $pa->{answer_queue}; + $self->job_remote_routing_key($pa->{answer_key}); $self->start_job($job); - $job->workerinfo($pa->{worker_fqhn}.":".$pa->{worker_pid}.":".$aq); + $job->workerinfo($pa->{worker_fqhn}.":".$pa->{worker_pid}.":".$self->job_remote_routing_key); $logger->trace("Result of job offer:\n".$self->dump_it($result)); $logger->trace(" -- args:\n".$self->dump_it($args)); @@ -267,6 +269,7 @@ try { foreach my $sub_task (@{$job_definition->{tasks}}) { my $task_args = shift(@$args) || {}; + #$self->logger->debug("ROUTING_KEY: ".$rmq->routing_key." QUEUE: ".$rmq->queue_name); $last_task = $self->run_task( job => $job, options => $sub_task->{options} || {}, @@ -274,7 +277,7 @@ scheduler => $self, args => $task_args, kmq => $rmq, - queue => $aq + routing_key => $self->job_local_routing_key, ); last if ( $last_task->state eq 'failed' or $job->skipped); @@ -297,7 +300,7 @@ id => $job->id }); - $self->send_finished_job($aq,$job->id); + $self->send_finished_job($self->job_remote_routing_key, $job->id); $self->end_job($job,$last_task); @@ -350,17 +353,20 @@ schema => $self->schema ); } elsif ( $distributable == 1 ) { + $logger->debug("--- Calling Kanku::Task::Remote - ".$self->job_queue->routing_key); + $logger->debug("--- Calling Kanku::Task::Remote - ".$opts{routing_key}); + $self->job_queue->routing_key($self->job_remote_routing_key); $tr = Kanku::Task::Remote->new( %defaults, - job_queue => $self->job_queue, - queue => $opts{queue}, - daemon => $self, + job_queue => $self->job_queue, + daemon => $self, + answer_key => $self->job_local_routing_key, ); } elsif ( $distributable == 2 ) { $tr = Kanku::Task::RemoteAll->new( %defaults, kmq => $opts{kmq}, - local_job_queue_name => $opts{kmq}->queue_name, + local_key_name => $opts{routing_key}, ); } else { croak("Unknown distributable value '$distributable' for module $mod\n"); @@ -401,13 +407,13 @@ $logger->trace("\$prefered_application = ".$self->dump_it($prefered_application)); $rmq->publish( - $prefered_application->{answer_queue}, - encode_json( - { - action => 'offer_job', - answer_queue => $prefered_application->{answer_queue} - } - ), + $prefered_application->{answer_key}, + encode_json( + { + action => 'offer_job', + answer_key => $prefered_application->{answer_key} + } + ), ); } @@ -420,10 +426,12 @@ $self->job_queue->publish( $aq, - encode_json({ - action => 'finished_job', - job_id => $job_id - }), + encode_json( + { + action => 'finished_job', + job_id => $job_id + } + ), ); } @@ -453,19 +461,23 @@ my $data = encode_json({action => 'advertise_job', %$opts}); - $logger->debug("creating new queue: ".$opts->{answer_queue}." (arch: ".$opts->{arch}.")"); - my $wcnt = 0; while(! %$all_applications ) { + $logger->debug('Publishing application: '.$self->dump_it($data)); + $rmq->publish( 'kanku.to_all_workers', $data, ); + $logger->debug('Wait for workers: '.$self->wait_for_workers); + sleep($self->wait_for_workers); + $logger->debug('Looking for applications on : '.$rmq->queue_name); + while ( my $msg = $rmq->recv(1000) ) { if ($msg ) { my $data; @@ -474,7 +486,7 @@ try { $data = decode_json($body); $logger->debug("Incomming application for $data->{job_id} from $data->{worker_fqhn} ($data->{worker_pid}))"); - $all_applications->{$data->{answer_queue}} = $data; + $all_applications->{$data->{answer_key}} = $data; } catch { $logger->debug("Error in JSON:\n$_\n$body\n"); }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Handler/Reboot.pm new/kanku-0.13.0/lib/Kanku/Handler/Reboot.pm --- old/kanku-0.12.7/lib/Kanku/Handler/Reboot.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Handler/Reboot.pm 2022-10-13 08:53:11.000000000 +0200 @@ -34,6 +34,7 @@ has [qw/wait_for_network wait_for_console/] => (is => 'rw',isa=>'Bool',lazy=>1,default=>1); has [qw/allow_ip_change/] => (is => 'rw',isa=>'Bool',lazy=>1,default=>0); has [qw/timeout/] => (is => 'rw',isa=>'Int',lazy=>1,default=>600); +has [qw/login_timeout/] => (is => 'rw',isa=>'Int',lazy=>1,default=>0); has gui_config => ( is => 'ro', @@ -83,6 +84,7 @@ my $con = $vm->console(); $con->login(); $con->cmd_timeout(-1); + $con->login_timeout($self->login_timeout) if $self->login_timeout; $con->cmd("reboot"); $con->cmd_timeout($self->timeout); if ($self->wait_for_console) { @@ -128,6 +130,7 @@ wait_for_console: 1 wait_for_network: 1 timeout: 600 + login_timeout: 900 allow_ip_change: 1 .... @@ -146,6 +149,8 @@ allow_ip_change: allow VM to change ip address on reboot + login_timeout: console login timeout + =head1 CONTEXT =head2 getters @@ -164,5 +169,7 @@ allow_ip_change : 0 (false) + login_timout : defaults to Kanku::Util::VM::Console + =cut diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Handler/SaltSSH.pm new/kanku-0.13.0/lib/Kanku/Handler/SaltSSH.pm --- old/kanku-0.12.7/lib/Kanku/Handler/SaltSSH.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Handler/SaltSSH.pm 2022-10-13 08:53:11.000000000 +0200 @@ -25,25 +25,29 @@ with 'Kanku::Roles::Handler'; with 'Kanku::Roles::Logger'; -has [qw/ipaddress publickey_path privatekey_path passphrase username/] => (is=>'rw',isa=>'Str'); -has states => (is=>'rw',isa=>'ArrayRef',default=>sub { [] }); -has loglevel => (is=>'rw',isa=>'Str', default=> 'debug'); +has [qw/ipaddress publickey_path privatekey_path passphrase/] => (is=>'rw',isa=>'Str'); +has states => (is=>'rw',isa=>'ArrayRef',default=>sub { [] }); +has loglevel => (is=>'rw',isa=>'Str', default=> ''); +has config_dir => (is=>'rw',isa=>'Str',default=>'.'); +has username => (is=>'rw',isa=>'Str',default=>'root'); +has minion => (is=>'rw',isa=>'Str'); sub execute { my $self = shift; my $results = []; my $ctx = $self->job->context; my $ip = $ctx->{ipaddress}; - my @cmd = ( - "salt-ssh", - "-l",$self->loglevel, - "--roster","scan",$ip, - '-i', - 'state.apply',join(',',@{$self->states}) - ); + my @cmd = ('salt-ssh'); + push @cmd, ('-l', $self->loglevel) if $self->loglevel; + push @cmd, ($self->minion) ? $self->minion : $self->ipaddress; + push @cmd, '--no-host-keys'; + push @cmd, ('--user', $self->username) if $self->username; + push @cmd, 'state.apply'; + push @cmd, join(',',@{$self->states}) if $self->states; $self->logger->debug("COMMAND: '@cmd'"); system(@cmd); + die "Error while executing '@cmd'\n" if $?; return { code => 0, message => "All commands on $ip executed successfully", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/RabbitMQ.pm new/kanku-0.13.0/lib/Kanku/RabbitMQ.pm --- old/kanku-0.12.7/lib/Kanku/RabbitMQ.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/RabbitMQ.pm 2022-10-13 08:53:11.000000000 +0200 @@ -38,6 +38,7 @@ use JSON::XS; use UUID ':all'; use Try::Tiny; +use Carp qw/longmess/; with 'Kanku::Roles::Logger'; with 'Kanku::Roles::Helpers'; @@ -88,6 +89,13 @@ isa => 'Object', ); +#around routing_key => sub { +# my $orig = shift; +# my $self = shift; +# $self->logger->debug(longmess("HERE @_")); +# $self->$orig(@_); +#}; +# =head1 METHODS =head2 connect - connect to a rabbitmq server @@ -258,7 +266,7 @@ ) ); - $self->logger->debug("Started consuming ".$self->queue_name."' as consumer_id ".$self->consumer_id); + $self->logger->debug("Started consuming ".$self->queue_name."' (".$self->routing_key.") as consumer_id ".$self->consumer_id); return $qn; } @@ -310,6 +318,8 @@ $self->connect; + $self->queue_name(q{}) if $self->queue_name =~ /^amq\./; + try { $self->create_queue; } catch { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Setup/LibVirt/Network.pm new/kanku-0.13.0/lib/Kanku/Setup/LibVirt/Network.pm --- old/kanku-0.12.7/lib/Kanku/Setup/LibVirt/Network.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Setup/LibVirt/Network.pm 2022-10-13 08:53:11.000000000 +0200 @@ -220,10 +220,19 @@ # Child runs this block setsid or die "Can't start a new session: $!"; my $conf = $self->dnsmasq_cfg_file($name); + my $dhcp_script; + for my $f ('/usr/libexec/libvirt_leaseshelper', '/usr/lib64/libvirt/libvirt_leaseshelper') { + if (-x $f ) { + $dhcp_script = $f; + last; + } + } + confess("Could not find dhcp-script") unless $dhcp_script; + my @cmd = ('/usr/sbin/dnsmasq', "--conf-file=$conf", "--leasefile-ro", - "--dhcp-script=/usr/lib64/libvirt/libvirt_leaseshelper"); + "--dhcp-script=$dhcp_script"); $self->logger->debug("@cmd"); system(@cmd); exit 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Task/Remote.pm new/kanku-0.13.0/lib/Kanku/Task/Remote.pm --- old/kanku-0.12.7/lib/Kanku/Task/Remote.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Task/Remote.pm 2022-10-13 08:53:11.000000000 +0200 @@ -72,11 +72,6 @@ isa=>'HashRef', ); -has queue => ( - is=>'rw', - isa=>'Str', -); - has rabbit_config => ( is => 'rw', isa => 'HashRef', @@ -86,6 +81,11 @@ }, ); +has answer_key => ( + is=>'rw', + isa=>'Str', +); + sub run { my ($self) = @_; @@ -100,7 +100,7 @@ my $data = encode_json( { action => 'task', - answer_queue => $self->job_queue->queue_name, + answer_key => $self->answer_key, job_id => $job->id, task_args => { job => { @@ -117,24 +117,24 @@ $logger->debug('Sending remote job: '.$self->module); $logger->debug(' - channel: '.$kmq->channel); $logger->debug(' - routing_key '.$kmq->routing_key); - $logger->debug(' - queue_name '.$self->queue); + $logger->debug(' - queue_name '.$kmq->queue_name); $logger->trace(Dumper($data)); - $kmq->queue->publish( - $kmq->channel, - $self->queue, + $kmq->publish( + $kmq->routing_key, $data, ); $self->logger->debug('Waiting for result on queue: '.$self->job_queue->queue_name()); # Wait for task results from worker my $result; + my $wait_for_answer = 10000; while (1){ - my $msg = $self->job_queue->recv(10000); + my $msg = $self->job_queue->recv($wait_for_answer); if ( $msg ) { my $indata; $self->logger->debug('Incomming task result'); - $self->logger->trace(Dumper($msg)); + $self->logger->debug(Dumper($msg)); my $body = $msg->{body}; try { @@ -171,7 +171,7 @@ my $rmq = Kanku::RabbitMQ->new(%{$self->rabbit_config}); $rmq->connect(no_retry=>1) || $logger->error('Could not connect to rabbitmq'); - my $queue = $indata->{answer_queue}; + my $queue = $indata->{answer_key}; $rmq->queue_name($queue); $rmq->publish( $queue, @@ -179,6 +179,7 @@ ); } } else { + $self->logger->debug("Got no answer within $wait_for_answer msec"); if ($self->daemon->detect_shutdown) { croak('Job '.$job->id." aborted by dispatcher daemon shutdown\n"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Task/RemoteAll.pm new/kanku-0.13.0/lib/Kanku/Task/RemoteAll.pm --- old/kanku-0.12.7/lib/Kanku/Task/RemoteAll.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Task/RemoteAll.pm 2022-10-13 08:53:11.000000000 +0200 @@ -46,9 +46,9 @@ use MIME::Base64; -has kmq => (is=>'rw',isa=>'Object'); +has kmq => (is=>'rw',isa=>'Object'); -has local_job_queue_name => (is=>'rw',isa=>'Str'); +has local_key_name => (is=>'rw',isa=>'Str'); has job => (is=>'rw',isa=>'Object'); @@ -74,7 +74,7 @@ my $data = encode_json( { action => 'send_task_to_all_workers', - answer_queue => $self->local_job_queue_name, + answer_key => $self->local_key_name, task_args => { job => { context => $job->context, @@ -87,6 +87,8 @@ } ); + $logger->debug(Dumper($data)); + $kmq->publish('kanku.to_all_hosts', $data); sleep($self->wait_for_workers); @@ -179,16 +181,16 @@ $data = decode_json($body); try { $data->{result}->{result} = decode_base64($data->{result}->{result}) if ($data->{result}->{result}); - $logger->debug("Got action '".$data->{action}."', answer_queue: '".$data->{answer_queue}."'" ); + $logger->debug("Got action '".$data->{action}."', answer_key: '".$data->{answer_key}."'" ); } catch { $logger->fatal("Error while decoding base64: $_"); $logger->debug(Dumper($data)); $data->{result} = "Error while decoding base64: $_"; }; if ( $data->{action} eq 'task_confirmation' ) { - $self->confirmations()->{$data->{answer_queue}} = $data; + $self->confirmations()->{$data->{answer_key}} = $data; } elsif ( $data->{action} eq 'finished_task' ) { - $self->results()->{$data->{answer_queue}} = $data; + $self->results()->{$data->{answer_key}} = $data; } } catch { $logger->debug("Error in JSON:\n$_\n$body\n"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.7/lib/Kanku/Util/IPTables.pm new/kanku-0.13.0/lib/Kanku/Util/IPTables.pm --- old/kanku-0.12.7/lib/Kanku/Util/IPTables.pm 2022-06-23 18:51:02.000000000 +0200 +++ new/kanku-0.13.0/lib/Kanku/Util/IPTables.pm 2022-10-13 08:53:11.000000000 +0200 @@ -112,7 +112,7 @@ for my $table ('nat', 'filter') { if ($self->chain_exists($table)) { for my $rule ($self->_get_rules_from_chain($table)) { - push(@{$result->{$table}->{$chain}},$rule->{line_number}) if ($rule->{domain_name} eq $domain_name); + push(@{$result->{$table}->{$chain}},$rule->{line_number}) if (($rule->{domain_name}||q{}) eq $domain_name); } } }