theforeman / foreman_hooks Goto Github PK
View Code? Open in Web Editor NEWRun custom hook scripts on Foreman events
Home Page: http://m0dlx.com/blog/Extending_Foreman_quickly_with_hook_scripts.html
License: GNU General Public License v3.0
Run custom hook scripts on Foreman events
Home Page: http://m0dlx.com/blog/Extending_Foreman_quickly_with_hook_scripts.html
License: GNU General Public License v3.0
The below output doesn't include after_build
& before_provision
. I think it should?
[root@foreman ~]# foreman-rake hooks:events[host/managed]
after_commit
after_create
after_destroy
after_find
after_initialize
after_rollback
after_save
after_touch
after_update
after_validation
before_create
before_destroy
before_save
before_update
before_validation
create
destroy
update
He we have a problem with foreman 1.11.x:
http://projects.theforeman.org/issues/14812
Maybe you can help with this?
Thank you!
In 0.3.14 the hook data is now nested too deep (extra host
hash)
[root@foreman-web01c tmp]# cat hook.object | jq
{
"host": {
"host": {
"ip": "192.168.1.125",
"ip6": "fe80::250:56ff:fea0:3078",
"environment_id": 46,
...
compared to 0.3.13
[root@foreman-web01c tmp]# cat hook.object | jq
{
"host": {
"ip": "192.168.1.125",
"ip6": "fe80::250:56ff:fea0:3078",
"environment_id": 46,
Hello,
I didn't find any mention on this, so I am not sure if this is a bug or a feature request, but hooks are not run on bulk actions.
A way to reproduce this is by changing the environment on a host:
foreman version: 1.15.6
foreman-hooks: 0.3.14
I am using Ubuntu 14.04 and the Foreman 1.8 deb repo. I have a Foreman 1.8.2 instance that I upgraded from 1.7.2. After I install foreman_hooks, either with the deb of 0.3.7 or the latest gem of 0.3.8, Foreman crashes on any web page with the following message:
Web application could not be started
undefined local variable or method `belongs_to_host' for #<Class:0x0000000432a9e8> (NameError)
/usr/share/foreman/vendor/ruby/1.9.1/gems/activerecord-3.2.21/lib/active_record/dynamic_matchers.rb:55:in `method_missing'
/usr/share/foreman/app/models/report.rb:6:in `<class:Report>'
/usr/share/foreman/app/models/report.rb:1:in `<top (required)>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/polyglot-0.3.5/lib/polyglot.rb:65:in `require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/polyglot-0.3.5/lib/polyglot.rb:65:in `require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in `block in require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in `load_dependency'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in `require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:359:in `require_or_load'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:502:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:83:in `load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:192:in `block in const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:514:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:83:in `load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:192:in `block in const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:514:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:83:in `load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:192:in `block in const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `const_missing'
/usr/share/foreman/app/models/concerns/hostext/search.rb:18:in `block in <module:Search>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/concern.rb:121:in `class_eval'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/concern.rb:121:in `append_features'
/usr/share/foreman/app/models/host/managed.rb:3:in `include'
/usr/share/foreman/app/models/host/managed.rb:3:in `<class:Managed>'
/usr/share/foreman/app/models/host/managed.rb:1:in `<top (required)>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/polyglot-0.3.5/lib/polyglot.rb:65:in `require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/polyglot-0.3.5/lib/polyglot.rb:65:in `require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in `block in require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in `load_dependency'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in `require'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:359:in `require_or_load'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:502:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:83:in `load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:192:in `block in const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/inflector/methods.rb:230:in `block in constantize'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/inflector/methods.rb:229:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/inflector/methods.rb:229:in `constantize'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/core_ext/string/inflections.rb:54:in `constantize'
/usr/share/foreman/app/models/host.rb:15:in `method_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks/orchestration_hook.rb:8:in `block in <module:OrchestrationHook>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/concern.rb:121:in `class_eval'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/concern.rb:121:in `append_features'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:71:in `include'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:71:in `attach_hook'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:85:in `block in load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:84:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:84:in `load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:192:in `block in const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:514:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:83:in `load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:192:in `block in const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:514:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:83:in `load_missing_constant_with_hooks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:192:in `block in const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:190:in `const_missing'
/usr/share/foreman/config/initializers/active_record_extensions.rb:2:in `<class:Base>'
/usr/share/foreman/config/initializers/active_record_extensions.rb:1:in `<top (required)>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:245:in `load'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:245:in `block in load'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in `load_dependency'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:245:in `load'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/engine.rb:593:in `block (2 levels) in <class:Engine>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/engine.rb:592:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/engine.rb:592:in `block in <class:Engine>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:30:in `instance_exec'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:30:in `run'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:55:in `block in run_initializers'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:54:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:54:in `run_initializers'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/application.rb:136:in `initialize!'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/railtie/configurable.rb:30:in `method_missing'
/usr/share/foreman/config/environment.rb:12:in `<top (required)>'
config.ru:3:in `require'
config.ru:3:in `block in <main>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/rack-1.4.7/lib/rack/builder.rb:51:in `instance_eval'
/usr/share/foreman/vendor/ruby/1.9.1/gems/rack-1.4.7/lib/rack/builder.rb:51:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `eval'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:158:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'
First of all this plugin rocks!
I created a hook to kick off a puppet run via shelling out to mcollective whenever an update occurs. But now I want filter out some of the updates so that mco is not called every single time. For example:.
run mco command when a host group is updated.
do not run mco command when other details are updated.
Since I am not able to compare any state information with the data coming in is there a way that I can see which call was made to trigger the hook? Specifically the url in the PUT statement
For example If my hook knew that update was called via /api/hosts/72/parameters/9 than I could exclude it from running the mco command.
Any way to pass the url as a new argument?
PUT "/api/hosts/72/parameters/9"
I created a hook script for the 'config_report' object:
config/hooks/config_report/after_create/10-test.sh
The hook script works (check report status and sends update to our monitoring system via REST api), but in the foreman log (production.log) I get a warning for every host:
2018-06-20 07:58:49 a742dbf8 [app] [W] Unable to render lxserv1330.example.com / 2018-06-20 07:58:21 UTC (ConfigReport) using RABL: Cannot find rabl template 'api/v2/configreports/show' within registered (["/usr/share/foreman/app/views", "/opt/theforeman/tfm/root/usr/share/gems/gems/foreman_snapshot_management-1.1.0/app/views", "/opt/theforeman/tfm/root/usr/share/gems/gems/apipie-rails-0.5.4/app/views", "/usr/share/foreman/app/views"]) view paths!
I also noticed that the second argument to the hook script ($2), which should be hostname, in fact is:
lxserv1330.example.com / 2018-06-20 07:58:21 UTC
(for the host in the log output above)
which seems wrong to me. As I said, the script works, I get the config report json data correctly, but the warning messages in the log is worrying.
Hi,
I'm currently using the development branch of Foreman.
I installed the foreman_hooks plugin, and it seems to be loaded fine. I had errors at first because I defined my hook scripts in config/hooks/host instead of config/hooks/host/managed but now I can see in the log that the plugin finds my scripts (and tells they have been registered).
I then provisioned several Rackspace VMs, everything went fine but none of my hook script were called. I carefully checked the scripts permissions.
For now I have 3 scripts, inside hosts/managed/create/, host/managed/destroy/ and host/managed/after_build/.
Why are these script not getting called? There is nothing in the log. Could it be because I'm using a development version of Foreman (2013/07/14)? Or because I'm provisioning Rackspace/cloud VMs?
Thanks for your help.
When setting up a hook, I want this one to apply to all non discovered hosts regardless of if they are managed or not, I was trying to use host/base
which host/managed
inherits. In this scenario, it appears that host/base
is not called. Specifically, I'm using after_destroy
. Is this intentional? If so is there a way to setup a hook for all hosts or is it suggested to symlink to multiple paths host/base
and host/managed
?
It seems that i can't find any hook that allows me to run something after a machine (in my case either GCE/EC2 instance) power state changes from ON to OFF and vise versa
Plus it seems that i can reach the hooks under foreman/model/ec2
Hi! Im new to Foreman and Katello and I was wondering if I can make foreman hooks work on content hosts too, or if is there a way to add an existing host to Foreman. Ive made some research and I found a script called foreman_client but that did not work for me.
(From @grimme-atix-de)
Hooks could be implemented as Ruby scripts too that are called from within the context of the plugin and Foreman.
For auditing purposes, it would be nice to pass the running users name (login name) as an argument to hook scripts.
Using
tfm-rubygem-foreman_hooks-0.3.14-1.fm1_15.el7.noarch
foreman-proxy-1.15.3-1.el7.noarch
foreman-1.15.3-1.el7.noarch
tfm-rubygem-foreman_discovery-9.1.1-1.fm1_15.el7.noarch
I dont see facts in input json after foreman discovers a VM/baremetal.
This is the workflow that i am trying with hooks and foreman discovery
VM/baremetal gets discovered -> JSON input to hooks -> Hooks use the facts from JSON input to add more facts from CMDB -> Facts get uploaded to foreman.
I have created the following hooks:
/usr/share/foreman/config/hooks/host/discovered/after_create/10-logger.py
ls /usr/share/foreman-community/hooks/
functions.py functions.pyc init.py
The scripts just get the input json and output the json to temp directory, to help me understand the structure.
However - I dont see facts or any other useful information during input json.
{
"id": 22,
"name": "mac00163e5426c9",
"last_compile": null,
"last_report": null,
"updated_at": "2017-08-18T20:13:44.058Z",
"created_at": "2017-08-18T20:13:44.058Z",
"root_pass": null,
"architecture_id": null,
"operatingsystem_id": null,
"environment_id": null,
"ptable_id": null,
"medium_id": null,
"build": false,
"comment": null,
"disk": null,
"installed_at": null,
"model_id": null,
"hostgroup_id": null,
"owner_id": null,
"owner_type": null,
"enabled": true,
"puppet_ca_proxy_id": null,
"managed": false,
"use_image": null,
"image_file": null,
"uuid": null,
"compute_resource_id": null,
"puppet_proxy_id": null,
"certname": null,
"image_id": null,
"organization_id": null,
"location_id": null,
"otp": null,
"realm_id": null,
"compute_profile_id": null,
"provision_method": null,
"grub_pass": "",
"global_status": 0,
"lookup_value_matcher": null,
"pxe_loader": null,
"discovery_rule_id": null
}
This is what happens when I restart foreman after I added my script to /usr/share/foreman/config/hooks/managed/after_build:
uninitialized constant Managed (NameError)
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks.rb:83:in `load_missing_constant_with_hooks'
/usr/share/foreman/config/initializers/deprecations.rb:3:in `const_missing'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/inflector/methods.rb:230:in `block in constantize'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/inflector/methods.rb:229:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/inflector/methods.rb:229:in `constantize'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/core_ext/string/inflections.rb:54:in `constantize'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks/engine.rb:6:in `block (2 levels) in <class:Engine>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks/engine.rb:6:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/foreman_hooks-0.3.8/lib/foreman_hooks/engine.rb:6:in `block in <class:Engine>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/callbacks.rb:462:in `_run__2952295411430003890__prepare__2925492264482690565__callbacks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/callbacks.rb:405:in `__run_callback'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/activesupport-3.2.21/lib/active_support/callbacks.rb:81:in `run_callbacks'
/usr/share/foreman/vendor/ruby/1.9.1/gems/actionpack-3.2.21/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
/usr/share/foreman/vendor/ruby/1.9.1/gems/actionpack-3.2.21/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/application/finisher.rb:47:in `block in <module:Finisher>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:30:in `instance_exec'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:30:in `run'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:55:in `block in run_initializers'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:54:in `each'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/initializable.rb:54:in `run_initializers'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/application.rb:136:in `initialize!'
/usr/share/foreman/vendor/ruby/1.9.1/gems/railties-3.2.21/lib/rails/railtie/configurable.rb:30:in `method_missing'
/usr/share/foreman/config/environment.rb:5:in `<top (required)>'
config.ru:3:in `require'
config.ru:3:in `block in <main>'
/usr/share/foreman/vendor/ruby/1.9.1/gems/rack-1.4.7/lib/rack/builder.rb:51:in `instance_eval'
/usr/share/foreman/vendor/ruby/1.9.1/gems/rack-1.4.7/lib/rack/builder.rb:51:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `eval'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:158:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'
I've noticed that the JSON data passed into the script doesn't mention more than one NIC.
It would be useful for our server build/deploy process if I could grab extra MAC addresses on host creation (we'd use that for things like DNS entries for the extra NICs, linking different servers together in our applications, etc etc)
Alternatively, should the "interfaces" section be populated? It's currently empty in the JSON I'm getting (from 1.7.3)
(From @grimme-atix-de)
When a callback hook (e.g. before_provision) is called and fails, no exception is raised and so execution continues.
Hooks should be able to provide a more user friendly description for the orchestration progress bars int he UI. Perhaps via a metadata file, or a call to the hook with a "description" argument.
I am using Foreman 1.14.3, foreman_hooks plugin 0.3.14. I have a generic script equivalent to the provided example logs.sh. When placed under host/managed/after_create/, every time a KVM (Libvirt) guest is created, it gets executed. But I cannot get it to execute in the following two scenarios:
I have tried host/managed/after_build/, host/base/after_create/, etc.
The foreman-rake hooks:objects
gives foreman/model/ec2
object.
However listing of
foreman-rake hooks:events[foreman/model/ec2]
fails with error:
rake aborted!
LoadError: Unable to autoload constant Foreman::Model::Ec2, expected /usr/share/foreman/app/models/compute_resources/foreman/model/ec2.rb to define it
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:495:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/2.3.0/gems/foreman_hooks-0.3.14/lib/foreman_hooks/as_dependencies_hook.rb:4:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:184:in `const_missing'
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/inflector/methods.rb:263:in `const_get'
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/inflector/methods.rb:263:in `block in constantize'
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/inflector/methods.rb:259:in `each'
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/inflector/methods.rb:259:in `inject'
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/inflector/methods.rb:259:in `constantize'
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-4.2.8/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
/usr/share/foreman/vendor/ruby/2.3.0/gems/foreman_hooks-0.3.14/lib/tasks/hooks.rake:11:in `block (2 levels) in <top (required)>'
What happens when a create hook script takes 10 minutes to complete? Does the hook get backgrounded? Would the UI block on the script? Aside from backgrounding the system command used inside the script is there a better way to wait for tasks without hanging the UI?
Hi,
Nightly cron doesn't send reports anymore since I've installed foreman_hooks.
Here is the output with --trace :
$ export RAILS_ENV=production; export FOREMAN_HOME=/usr/share/foreman; cd ${FOREMAN_HOME} && bundle exec /usr/bin/rake --trace reports:summarize
(in /usr/share/foreman)
rake aborted!
uninitialized constant Rake::DSL
/usr/share/foreman/vendor/ruby/1.8/gems/foreman_hooks-0.3.2/lib/foreman_hooks.rb:75:in load_missing_constant' /usr/share/foreman/Rakefile:3 /usr/lib/ruby/1.8/rake.rb:2383:in
load'
/usr/lib/ruby/1.8/rake.rb:2383:in raw_load_rakefile' /usr/lib/ruby/1.8/rake.rb:2017:in
load_rakefile'
/usr/lib/ruby/1.8/rake.rb:2068:in standard_exception_handling' /usr/lib/ruby/1.8/rake.rb:2016:in
load_rakefile'
/usr/lib/ruby/1.8/rake.rb:2000:in run' /usr/lib/ruby/1.8/rake.rb:2068:in
standard_exception_handling'
/usr/lib/ruby/1.8/rake.rb:1998:in `run'
/usr/bin/rake:28
Thanks for your help.
Failing hooks sometimes are hard for the user to understand, and if they were printed in the appearing error message and not just only the logs, that would help a lot.
So if hooks could print STDERR when failing it would make the reason for failure easier to understand
Copied from http://projects.theforeman.org/issues/19565
Started playing with foreman_hooks and noticed that the json data passed to my hook script is missing host parameters when I create a new host. I started digging through commits and found that if i revert this commit:
theforeman/foreman@94265cf#diff-5ef0189b17a78606adef8f22e909697e
in the app/views/api/v2/hosts/show.json.rabl file it works again.
So, this code (which nowadays is moved to main.json.rabl):
node do |host| { :parameters => partial("api/v2/parameters/base", :object => host.host_parameters.authorized) } end
does not work for me but this do:
child :host_parameters => :parameters do extends "api/v2/parameters/base" end
I'm running this as administrator in my Foreman installation, am I missing something or is this a bug?
As per this link, this is supported:
https://www.omniref.com/ruby/gems/foreman_hooks/0.1.0
But I tried putting a script in the directory ~foreman/config/hooks/host/discovered/{create, destroy}.
But I get this error in the logs:
2015-07-16 09:39:04 [W] Host::Discovered doesn't support orchestration, can't run orchestration hooks: use Rails events instead
I checked the Host::Discovered class and it doesn't include Orchestration module. Is this a limitation of the class? If so, the above link should be corrected.
Is there any way to use the callback hooks or any other mechanism to achieve the same?
Thanks,
-PP
This is probably an enhancement.
If a hook fails, it would be helpful to return the error output of the hook to the user.
This is mostly useful when users enter an incorrect value, which gets validated by the hook.
With #11 in place, on failure only the path is visible in the bubble.
As far as I see, the output is already captured, but it is not returned to the exception.
Regards,
Stefan
I am attempting to setup the examples/ scripts to verify that audit events are logged, but I can't get any audit events to write to /tmp/hook.log. I copied the same scripts to config/hooks/host/managed/after_update/ and changing host group was logged. I've tried config/hooks/audited/adapters/active_record/audit/after_create/log.sh per the documentation but nothing is logged. When I start rails via rails s -d
in development, this plugin prints the hooks are registered. This is using foreman_hooks 0.3.9 and current develop branch of Foreman.
If a hook is deleted, tasks will fail. Additionally, it is unclear when/where hooks get installed or uninstalled.
Hook: 50-ad_realm task failed with the following error: No such file or directory - /usr/share/foreman/config/hooks/host/managed/create/50-ad_realm
| Errno::ENOENT: No such file or directory - /usr/share/foreman/config/hooks/host/managed/create/50-ad_realm
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:193:in `spawn'
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:193:in `popen_run'
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:188:in `popen2e'
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:335:in `capture2e'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.13/lib/foreman_hooks/util.rb:46:in `exec_hook_int'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.13/lib/foreman_hooks/util.rb:34:in `block in exec_hook'
| /opt/rh/rh-ruby22/root/usr/share/gems/gems/bundler-1.7.8/lib/bundler.rb:236:in `block in with_clean_env'
| /opt/rh/rh-ruby22/root/usr/share/gems/gems/bundler-1.7.8/lib/bundler.rb:223:in `with_original_env'
| /opt/rh/rh-ruby22/root/usr/share/gems/gems/bundler-1.7.8/lib/bundler.rb:229:in `with_clean_env'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.13/lib/foreman_hooks/util.rb:34:in `exec_hook'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.13/lib/foreman_hooks/orchestration_hook.rb:57:in `hook_execute_set'
| /usr/share/foreman/app/models/concerns/orchestration.rb:195:in `execute'
| /usr/share/foreman/app/models/concerns/orchestration.rb:135:in `block in process'
| /usr/share/foreman/app/models/concerns/orchestration.rb:127:in `each'
| /usr/share/foreman/app/models/concerns/orchestration.rb:127:in `process'
| /usr/share/foreman/app/models/concerns/orchestration.rb:35:in `around_save_orchestration'
When creating or destroying EC2 hosts on Foreman 1.1, orchestration hooks don't get queued and executed.
In Katello, the job of destroying hosts is farmed off to foreman-tasks so that associated Katello entities like content_hosts can be dealt with at the same time. foreman-tasks runs outside of the main Foreman process, but takes care to load Foreman's application.rb
and all of Foreman's plugins. The result is that hooks are run in foreman-tasks jobs, but they fail to find Foreman's views path:
2015-12-03 00:28:20 [D] Running hook: /usr/share/foreman/config/hooks/host/managed/destroy/50_remove_dhcp_conf.sh destroy ci-build-1235.umd.edu
2015-12-03 00:28:20 [W] Unable to render ci-build-1235.umd.edu (Host::Managed) using RABL: Cannot find rabl template 'api/v2/hosts/show' within registered (["app/views"]) view paths!
2015-12-03 00:28:20 [D] /opt/rh/ruby193/root/usr/share/gems/gems/rabl-0.9.0/lib/rabl/partials.rb:47:in `block in fetch_source'
/opt/rh/ruby193/root/usr/share/gems/gems/rabl-0.9.0/lib/rabl.rb:58:in `source_cache'
/opt/rh/ruby193/root/usr/share/gems/gems/rabl-0.9.0/lib/rabl/partials.rb:34:in `fetch_source'
/opt/rh/ruby193/root/usr/share/gems/gems/rabl-0.9.0/lib/rabl/renderer.rb:62:in `process_source'
/opt/rh/ruby193/root/usr/share/gems/gems/rabl-0.9.0/lib/rabl/renderer.rb:36:in `initialize'
/opt/rh/ruby193/root/usr/share/gems/gems/rabl-0.9.0/lib/rabl.rb:77:in `new'
/opt/rh/ruby193/root/usr/share/gems/gems/rabl-0.9.0/lib/rabl.rb:77:in `render'
/opt/rh/ruby193/root/usr/share/gems/gems/foreman_hooks-0.3.7/lib/foreman_hooks/util.rb:18:in `render_hook_json'
/opt/rh/ruby193/root/usr/share/gems/gems/foreman_hooks-0.3.7/lib/foreman_hooks/util.rb:29:in `block in exec_hook'
...
Hello,
The foreman-rake hooks:objects
gives nic/bmc object
.
However listing of foreman-rake hooks:events[nic/bmc]
fails with error:
** Invoke hooks:events (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute hooks:events
rake aborted!
LoadError: Unable to autoload constant Nic::Bmc, expected /usr/share/foreman/app/models/nic/bmc.rb to define it
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:495:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/2.1.0/gems/foreman_hooks-0.3.14/lib/foreman_hooks/as_dependencies_hook.rb:4:in `load_missing_constant'
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/dependencies.rb:184:in `const_missing'
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/inflector/methods.rb:263:in `const_get'
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/inflector/methods.rb:263:in `block in constantize'
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/inflector/methods.rb:259:in `each'
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/inflector/methods.rb:259:in `inject'
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/inflector/methods.rb:259:in `constantize'
/usr/share/foreman/vendor/ruby/2.1.0/gems/activesupport-4.2.9/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
/usr/share/foreman/vendor/ruby/2.1.0/gems/foreman_hooks-0.3.14/lib/tasks/hooks.rake:11:in `block (2 levels) in <top (required)>'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/task.rb:251:in `call'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/task.rb:251:in `block in execute'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/task.rb:251:in `each'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/task.rb:251:in `execute'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/task.rb:195:in `block in invoke_with_call_chain'
/usr/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/task.rb:188:in `invoke_with_call_chain'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/task.rb:181:in `invoke'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:160:in `invoke_task'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:116:in `each'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:116:in `block in top_level'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:125:in `run_with_threads'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:110:in `top_level'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:83:in `block in run'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:186:in `standard_exception_handling'
/usr/share/foreman/vendor/ruby/2.1.0/gems/rake-12.3.0/lib/rake/application.rb:80:in `run'
/usr/bin/rake:27:in `<main>'
Tasks: TOP => hooks:events
As domcleal says:
Arguably this is a bug in Foreman, it should define mixed-case Ec2 rather than all-caps EC2 to match the Rails autoloader expectations, but foreman_hooks could work around it.
Anybody knows if a workaround is possible or in progress ?
I was looking on foreman issue without finding is this problem was open. Is this normal?
The frontpage says "cd ~foreman && sudo -u foreman bundle install" but your blog says "bundle update" - I suspect the former is causing people on foreman1.1 (rpm-style) to accidentally upgrade rails to 3.2 (not actually tested that though).
If I remove a hook from the hooks directory and restore foreman, it is not found, which is great. However foreman keeps complaining in the UI that the file can not be found and fails the build process.
How do I get rid of a deprecated hook?
my foreman version = 1.4.2
and i already tested foreman_hooks tag = 0.3.4 & 0.3.7
and also reference hook_functions.sh & jgrep ruby gem already installed.
but I can not get json data, here is my hook script.
#!/bin/bash
HOOK_EVENT=$1
HOOK_OBJECT=$2
HOOK_OBJECT_FILE=$(mktemp -t foreman_hooks.XXXXXXXXXX)
trap "rm -f $HOOK_OBJECT_FILE" EXIT
cat > $HOOK_OBJECT_FILE
hook_data() {
if [ $# -eq 1 ]; then
jgrep -s "$1" < $HOOK_OBJECT_FILE
else
jgrep "$*" < $HOOK_OBJECT_FILE
fi
}
echo "current path = $(dirname $0)" >> /tmp/hook.log
# event name (create, before_destroy etc.)
# orchestration hooks must obey this to support rollbacks (create/update/destroy)
event=${HOOK_EVENT}
# to_s representation of the object, e.g. host's fqdn
object=${HOOK_OBJECT}
# Example of using hook_data to query the JSON representation of the object
# passed by foreman_hooks. `cat $HOOK_OBJECT_FILE` to see the contents.
hostname=$(hook_data host.name)
echo "$(date): received ${event} on ${object}" >> /tmp/hook.log
echo "hostname = ${hostname}" >> /tmp/hook.log
# exit code is important on orchestration tasks
exit 0
I can correct get $event & $object variable in output log.
but my $hostname is always empty.
is it a bug? or just my mismatch configuration?
(From @grimme-atix-de)
Currently the JSON representation of the object receiving the event is passed into the hook, but it would be good to pass in additional related data such as host parameters.
I created an testscript as /usr/share/foreman/config/hooks/host/managed/after_initialize/50_testing.sh
After removing this script i was unable to view my hosts anymore. The productionlog shows:
2016-09-09 14:10:14 [app] [W] Action failed
| Errno::ENOENT: No such file or directory - /usr/share/foreman/config/hooks/host/managed/after_initialize/50_testing.sh
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:193:in `spawn'
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:193:in `popen_run'
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:188:in `popen2e'
| /opt/rh/rh-ruby22/root/usr/share/ruby/open3.rb:335:in `capture2e'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.11/lib/foreman_hooks/util.rb:46:in `exec_hook_int'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.11/lib/foreman_hooks/util.rb:34:in `block in exec_hook'
| /opt/rh/rh-ruby22/root/usr/share/gems/gems/bundler-1.7.8/lib/bundler.rb:236:in `block in with_clean_env'
| /opt/rh/rh-ruby22/root/usr/share/gems/gems/bundler-1.7.8/lib/bundler.rb:223:in `with_original_env'
| /opt/rh/rh-ruby22/root/usr/share/gems/gems/bundler-1.7.8/lib/bundler.rb:229:in `with_clean_env'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.11/lib/foreman_hooks/util.rb:34:in `exec_hook'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.11/lib/foreman_hooks/callback_hooks.rb:19:in `block (4 levels) in <module:CallbackHooks>'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.11/lib/foreman_hooks/callback_hooks.rb:19:in `each'
| /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.11/lib/foreman_hooks/callback_hooks.rb:19:in `block (3 levels) in <module:CallbackHooks>'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:432:in `block in make_lambda'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:239:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:239:in `block in halting'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:506:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:506:in `block in call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:506:in `each'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:506:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:778:in `_run_initialize_callbacks'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/core.rb:312:in `init_with'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/persistence.rb:69:in `instantiate'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/querying.rb:50:in `block (2 levels) in find_by_sql'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/result.rb:51:in `block in each'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/result.rb:51:in `each'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/result.rb:51:in `each'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/querying.rb:50:in `map'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/querying.rb:50:in `block in find_by_sql'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/querying.rb:49:in `find_by_sql'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/relation.rb:639:in `exec_queries'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/relation.rb:515:in `load'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/relation.rb:243:in `to_a'
| /opt/theforeman/tfm/root/usr/share/gems/gems/will_paginate-3.1.0/lib/will_paginate/active_record.rb:126:in `block in to_a'
| /opt/theforeman/tfm/root/usr/share/gems/gems/will_paginate-3.1.0/lib/will_paginate/collection.rb:96:in `create'
| /opt/theforeman/tfm/root/usr/share/gems/gems/will_paginate-3.1.0/lib/will_paginate/active_record.rb:125:in `to_a'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/relation/delegation.rb:46:in `map'
| /usr/share/foreman/app/controllers/hosts_controller.rb:49:in `block (2 levels) in index'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/mime_responds.rb:217:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/mime_responds.rb:217:in `respond_to'
| /usr/share/foreman/app/controllers/hosts_controller.rb:45:in `index'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/abstract_controller/base.rb:198:in `process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/rendering.rb:10:in `process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:117:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:117:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting'
| /opt/theforeman/tfm/root/usr/share/gems/gems/rails-observers-0.1.2/lib/rails/observers/action_controller/caching/sweeping.rb:73:in `around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:455:in `public_send'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:455:in `block in make_lambda'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `block in halting'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `block in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting'
| /usr/share/foreman/app/controllers/concerns/application_shared.rb:13:in `set_timezone'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:432:in `block in make_lambda'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `block in halting'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `block in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting'
| /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:32:in `clear_thread'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:432:in `block in make_lambda'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `block in halting'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `block in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting'
| /opt/theforeman/tfm/root/usr/share/gems/gems/rails-observers-0.1.2/lib/rails/observers/action_controller/caching/sweeping.rb:73:in `around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:455:in `public_send'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:455:in `block in make_lambda'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:312:in `block in halting'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:497:in `block in around'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:505:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/abstract_controller/callbacks.rb:19:in `process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/rescue.rb:29:in `process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:164:in `block in instrument'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:164:in `instrument'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/abstract_controller/base.rb:137:in `process'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionview-4.2.5.1/lib/action_view/rendering.rb:30:in `process'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal.rb:196:in `dispatch'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_controller/metal.rb:237:in `block in action'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/routing/route_set.rb:74:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/routing/route_set.rb:43:in `serve'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/journey/router.rb:43:in `block in serve'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/journey/router.rb:30:in `each'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/journey/router.rb:30:in `serve'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/routing/route_set.rb:815:in `call'
| /opt/theforeman/tfm/root/usr/share/gems/gems/apipie-rails-0.3.6/lib/apipie/static_dispatcher.rb:65:in `call'
| /opt/theforeman/tfm/root/usr/share/gems/gems/apipie-rails-0.3.6/lib/apipie/extractor/recorder.rb:132:in `call'
| /opt/theforeman/tfm/root/usr/share/gems/gems/apipie-rails-0.3.6/lib/apipie/middleware/checksum_in_headers.rb:27:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/etag.rb:24:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/conditionalget.rb:25:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/head.rb:13:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/params_parser.rb:27:in `call'
| /usr/share/foreman/lib/middleware/catch_json_parse_errors.rb:9:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/flash.rb:260:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/session/abstract/id.rb:225:in `context'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/session/abstract/id.rb:220:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/cookies.rb:560:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/query_cache.rb:36:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:88:in `__run_callbacks__'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/railties-4.2.5.1/lib/rails/rack/logger.rb:38:in `call_app'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/railties-4.2.5.1/lib/rails/rack/logger.rb:22:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/request_id.rb:21:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/methodoverride.rb:22:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/runtime.rb:18:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/activesupport-4.2.5.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/static.rb:116:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/sendfile.rb:113:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/railties-4.2.5.1/lib/rails/engine.rb:518:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/railties-4.2.5.1/lib/rails/application.rb:165:in `call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/railties-4.2.5.1/lib/rails/railtie.rb:194:in `public_send'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/railties-4.2.5.1/lib/rails/railtie.rb:194:in `method_missing'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/urlmap.rb:66:in `block in call'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/urlmap.rb:50:in `each'
| /opt/rh/sclo-ror42/root/usr/share/gems/gems/rack-1.6.2/lib/rack/urlmap.rb:50:in `call'
| /usr/share/passenger/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
| /usr/share/passenger/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
| /usr/share/passenger/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
| /usr/share/passenger/phusion_passenger/request_handler.rb:455:in `block (3 levels) in start_threads'
| /opt/theforeman/tfm/root/usr/share/gems/gems/logging-1.8.2/lib/logging/diagnostic_context.rb:323:in `call'
| /opt/theforeman/tfm/root/usr/share/gems/gems/logging-1.8.2/lib/logging/diagnostic_context.rb:323:in `block in create_with_logging_context'
2016-09-09 14:10:14 [app] [I] Rendered common/500.html.erb within layouts/application (4.7ms)
2016-09-09 14:10:14 [app] [I] Rendered layouts/_application_content.html.erb (0.3ms)
2016-09-09 14:10:14 [app] [I] Rendered layouts/base.html.erb (1.1ms)
2016-09-09 14:10:14 [app] [I] Completed 500 Internal Server Error in 396ms (Views: 7.3ms | ActiveRecord: 167.0ms)
The following line:
ENV['FOREMAN_HOOKS_USER'] = User.current.login
in lib/foreman_hooks/util.rb
sets current user as an environment variable. This does not work when a new external user logs in and Foreman tries to update user attributes (firstname, lastname, email). The changes are executed and audited which will trigger any hooks you may have in audited/audit/
, which will fail with backtrace:
2022-05-12T08:59:08 [D|app|d0bc1f0d] Running 6 hooks for Audited::Audit#after_create
2022-05-12T08:59:08 [D|sql|d0bc1f0d] Running hook: /usr/share/foreman/config/hooks/audited/audit/after_create/05-test.sh after_create 166891
2022-05-12T08:59:08 [D|sql|d0bc1f0d] (0.5ms) ROLLBACK
2022-05-12T08:59:08 [W|app|d0bc1f0d] undefined method `login' for nil:NilClass
2022-05-12T08:59:08 [I|app|d0bc1f0d] Backtrace for 'undefined method `login' for nil:NilClass' error (NoMethodError): undefined method `login' for nil:NilClass
d0bc1f0d | /usr/share/gems/gems/foreman_hooks-0.3.17/lib/foreman_hooks/util.rb:56:in `exec_hook_int'
Probably because the User.current.login
is not available at this stage. So we would need some validation and fallback setting here.
(From @grimme-atix-de)
foreman_hooks should be more resilient to scripts not listening to stdin, by not throwing exceptions when unable to write to the pipe.
I'm trying to run a hook fore after_save event of Host::Discoverd object.
I'm getting the following error:
2015-08-07 07:58:28 [W] Unable to render mac002128a5131e (Host::Discovered) using RABL: Cannot find rabl template 'api/v2/host/discovereds/show' within registered (["app/views", "/usr/share/foreman/app/views"]) view paths!
this line of code assumes that there is a rabl file for the host object. Only that in this case, the object is not of Host::Managed class. Since foreman_discovery is a plugin, it doesn't make sense to ship the rabl file with the foreman code.
https://github.com/theforeman/foreman_hooks/blob/master/lib/foreman_hooks/util.rb#L18https://github.com/theforeman/foreman_hooks/blob/master/lib/foreman_hooks/util.rb#L18
What could be the best solution in this case?
-PP
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.