hammer_cli_foreman_webhooks 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0feb157669e6b414e8b3a9ac20b2a6f02bd1c070cf8e8c29a57c8e80e7c7420d
4
+ data.tar.gz: 51b5e1e238c9218dac0968f1127eb45ce2e1b52c51e08babda53d69241237efb
5
+ SHA512:
6
+ metadata.gz: 25f6a72ed3e8d8b5c6ed21b2d5da48bdf49c2f2d56a35b479167832a88191a03d81e51f29d83f384c2b0e8fdda185a7d70033be397b3a78e5639a027e7b1c0bc
7
+ data.tar.gz: 5133fc734abaef5a43a5690b4929817c5e2c49cd606108966590c78d526824d606bb7b44ae809636b27633147de5abba57aac720f499549735ba9d68f80398d6
data/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ This program and entire repository is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
2
+
3
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
4
+
5
+ You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # Hammer CLI Foreman Webhooks
2
+
3
+ This Hammer CLI plugin contains set of commands for [foreman_webhooks](
4
+ https://github.com/theforeman/foreman_webhooks
5
+ ), a plugin to Foreman for Webhooks management.
6
+
7
+ ## Versions
8
+
9
+ This is the list of which version of Foreman Webhooks is needed to which version of this plugin.
10
+
11
+ | hammer_cli_foreman_webhooks | v0.0.1 |
12
+ |-----------------------------|--------|
13
+ | foreman_webhooks | v0.0.1 |
14
+
15
+ ## Installation
16
+
17
+ $ gem install hammer_cli_foreman_webhooks
18
+
19
+ $ mkdir -p ~/.hammer/cli.modules.d/
20
+
21
+ $ cat <<EOQ > ~/.hammer/cli.modules.d/foreman_webhooks.yml
22
+ :foreman_webhooks:
23
+ :enable_module: true
24
+ EOQ
25
+
26
+ # to confirm things work, this should return useful output
27
+ hammer webhooks --help
28
+
29
+ ## More info
30
+
31
+ See our [Hammer CLI installation and configuration instuctions](
32
+ https://github.com/theforeman/hammer-cli/blob/master/doc/installation.md#installation).
@@ -0,0 +1,2 @@
1
+ :foreman_webhooks:
2
+ :enable_module: true
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HammerCLIForemanWebhooks
4
+ require 'hammer_cli'
5
+ require 'hammer_cli_foreman'
6
+
7
+ require 'hammer_cli_foreman_webhooks/version'
8
+ require 'hammer_cli_foreman_webhooks/command_extensions'
9
+ require 'hammer_cli_foreman_webhooks/webhook'
10
+ require 'hammer_cli_foreman_webhooks/webhook_template'
11
+
12
+ HammerCLI::MainCommand.lazy_subcommand(
13
+ 'webhook',
14
+ 'Manage webhooks',
15
+ 'HammerCLIForemanWebhooks::Webhook',
16
+ 'hammer_cli_foreman_webhooks/webhook'
17
+ )
18
+ HammerCLI::MainCommand.lazy_subcommand(
19
+ 'webhook-template',
20
+ 'Manipulate webhook templates',
21
+ 'HammerCLIForemanWebhooks::WebhookTemplate',
22
+ 'hammer_cli_foreman_webhooks/webhook_template'
23
+ )
24
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hammer_cli_foreman_webhooks/command_extensions/webhook'
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HammerCLIForemanWebhooks
4
+ module CommandExtensions
5
+ class Webhook < HammerCLI::CommandExtensions
6
+ option '--ssl-ca-certs', 'PATH_TO_CA_FILE',
7
+ _('File containing X509 Certification Authorities concatenated in PEM format'),
8
+ format: HammerCLI::Options::Normalizers::File.new
9
+ option '--http-headers', 'HTTP_HEADERS', '',
10
+ format: HammerCLI::Options::Normalizers::KeyValueList.new
11
+
12
+ before_print do |data|
13
+ data['http_headers'] = http_headers_from_json(data['http_headers'])
14
+ end
15
+
16
+ request_params do |params|
17
+ if params['webhook']['http_headers']
18
+ params['webhook']['http_headers'] = http_headers_to_json(params['webhook']['http_headers'])
19
+ end
20
+ end
21
+
22
+ def self.http_headers_to_json(headers)
23
+ return headers unless headers.is_a?(Hash)
24
+
25
+ require 'json'
26
+ JSON.dump(headers)
27
+ end
28
+
29
+ def self.http_headers_from_json(data)
30
+ return data unless data.is_a?(String)
31
+
32
+ require 'json'
33
+ begin
34
+ JSON.parse(data).each_pair.each_with_object([]) do |(key, value), result|
35
+ result << { name: key, value: value }
36
+ end
37
+ rescue JSON::ParserError
38
+ [{}]
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HammerCLIForemanWebhooks
4
+ def self.version
5
+ @version ||= Gem::Version.new '0.0.1'
6
+ end
7
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HammerCLIForemanWebhooks
4
+ class Webhook < HammerCLIForeman::Command
5
+ resource :webhooks
6
+
7
+ class ListCommand < HammerCLIForeman::ListCommand
8
+ output do
9
+ field :id, _('Id')
10
+ field :name, _('Name')
11
+ field :target_url, _('Target URL')
12
+ field :enabled, _('Enabled'), Fields::Boolean
13
+ end
14
+
15
+ build_options
16
+ end
17
+
18
+ class InfoCommand < HammerCLIForeman::InfoCommand
19
+ output Webhook::ListCommand.output_definition do
20
+ field :event, _('Event')
21
+ field :http_method, _('HTTP Method')
22
+ field :http_content_type, _('HTTP Content Type')
23
+ custom_field Fields::Reference, label: _('Webhook Template'), path: [:webhook_template]
24
+ field :user, _('User'), Fields::Field, sets: %w[ADDITIONAL ALL]
25
+ field :verify_sll, _('Verify SSL'), Fields::Boolean, sets: %w[ADDITIONAL ALL]
26
+ field :ssl_ca_certs, _('X509 Certification Authorities'), Fields::Text, sets: %w[ADDITIONAL ALL]
27
+ collection :http_headers, _('HTTP Headers'), sets: %w[ADDITIONAL ALL] do
28
+ custom_field Fields::KeyValue
29
+ end
30
+ HammerCLIForeman::References.timestamps(self)
31
+ end
32
+
33
+ build_options
34
+
35
+ extend_with(HammerCLIForemanWebhooks::CommandExtensions::Webhook.new(only: :before_print))
36
+ end
37
+
38
+ class CreateCommand < HammerCLIForeman::CreateCommand
39
+ success_message _('Webhook [%{name}] created.')
40
+ failure_message _('Could not create the webhook')
41
+
42
+ build_options without: %i[ssl_ca_certs http_headers]
43
+
44
+ extend_with(HammerCLIForemanWebhooks::CommandExtensions::Webhook.new(only: :options))
45
+ end
46
+
47
+ class UpdateCommand < HammerCLIForeman::UpdateCommand
48
+ success_message _('Webhook [%{name}] updated.')
49
+ failure_message _('Could not update the webhook')
50
+
51
+ build_options without: %i[ssl_ca_certs http_headers]
52
+
53
+ extend_with(HammerCLIForemanWebhooks::CommandExtensions::Webhook.new(only: :options))
54
+ end
55
+
56
+ class DeleteCommand < HammerCLIForeman::DeleteCommand
57
+ success_message _('Webhook [%{name}] deleted.')
58
+ failure_message _('Could not delete the webhook')
59
+
60
+ build_options
61
+ end
62
+
63
+ autoload_subcommands
64
+ end
65
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HammerCLIForemanWebhooks
4
+ class WebhookTemplate < HammerCLIForeman::Command
5
+ resource :webhook_templates
6
+
7
+ class ListCommand < HammerCLIForeman::ListCommand
8
+ output do
9
+ field :id, _('Id')
10
+ field :name, _('Name')
11
+ end
12
+
13
+ build_options
14
+ end
15
+
16
+ class InfoCommand < HammerCLIForeman::InfoCommand
17
+ output WebhookTemplate::ListCommand.output_definition do
18
+ field :description, _('Description'), Fields::Text
19
+ field :locked, _('Locked'), Fields::Boolean
20
+ field :default, _('Default'), Fields::Boolean
21
+ HammerCLIForeman::References.timestamps(self)
22
+ HammerCLIForeman::References.taxonomies(self)
23
+ collection :inputs, _('Template inputs') do
24
+ field :id, _('Id'), Fields::Id
25
+ field :name, _('Name')
26
+ field :description, _('Description')
27
+ field :required, _('Required'), Fields::Boolean
28
+ field :options, _('Options'), Fields::List, hide_blank: true
29
+ end
30
+ end
31
+
32
+ build_options
33
+ end
34
+
35
+ class CloneCommand < HammerCLIForeman::UpdateCommand
36
+ action :clone
37
+ command_name 'clone'
38
+
39
+ success_message _('Webhook template cloned.')
40
+ failure_message _('Could not clone the webhook template')
41
+
42
+ validate_options do
43
+ option(:option_new_name).required
44
+ end
45
+
46
+ build_options
47
+ end
48
+
49
+ class ImportCommand < HammerCLIForeman::Command
50
+ command_name 'import'
51
+ action :import
52
+
53
+ option '--file', 'PATH', _('Path to a file that contains the webhook template content including metadata'),
54
+ attribute_name: :option_template, format: HammerCLI::Options::Normalizers::File.new
55
+
56
+ validate_options do
57
+ all(:option_name, :option_template).required
58
+ end
59
+
60
+ success_message _('Imported webhook template successfully.')
61
+ failure_message _('Could not import the webhook template')
62
+
63
+ build_options without: %i[template]
64
+ end
65
+
66
+ class DumpCommand < HammerCLIForeman::InfoCommand
67
+ command_name 'dump'
68
+ desc _('View webhook template content')
69
+
70
+ def print_data(webhook_template)
71
+ puts webhook_template['template']
72
+ end
73
+
74
+ build_options
75
+ end
76
+
77
+ class CreateCommand < HammerCLIForeman::CreateCommand
78
+ success_message _('Webhook template [%{name}] created.')
79
+ failure_message _('Could not create the webhook template')
80
+
81
+ build_options
82
+ end
83
+
84
+ class UpdateCommand < HammerCLIForeman::UpdateCommand
85
+ success_message _('Webhook template [%{name}] updated.')
86
+ failure_message _('Could not update the webhook template')
87
+
88
+ build_options
89
+ end
90
+
91
+ class DeleteCommand < HammerCLIForeman::DeleteCommand
92
+ success_message _('Webhook template [%{name}] deleted.')
93
+ failure_message _('Could not delete the webhook template')
94
+
95
+ build_options
96
+ end
97
+
98
+ autoload_subcommands
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hammer_cli_foreman_webhooks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Oleh Fedorenko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hammer_cli_foreman
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ description:
34
+ email:
35
+ - ofedoren@redhat.com
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - LICENSE
41
+ - README.md
42
+ - config/foreman_webhooks.yml
43
+ - lib/hammer_cli_foreman_webhooks.rb
44
+ - lib/hammer_cli_foreman_webhooks/command_extensions.rb
45
+ - lib/hammer_cli_foreman_webhooks/command_extensions/webhook.rb
46
+ - lib/hammer_cli_foreman_webhooks/version.rb
47
+ - lib/hammer_cli_foreman_webhooks/webhook.rb
48
+ - lib/hammer_cli_foreman_webhooks/webhook_template.rb
49
+ homepage: https://github.com/theforeman/hammer-cli-foreman-webhooks
50
+ licenses:
51
+ - GPL-3.0
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '2.5'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.7.6.2
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Foreman Webhooks plugin for Hammer CLI
73
+ test_files: []