Revision 587327f4
Added by Thomas McKay about 10 years ago
lib/hammer_cli_csv/base.rb | ||
---|---|---|
# Copyright (c) 2013-2014 Red Hat
|
||
# Copyright 2013-2014 Red Hat, Inc.
|
||
#
|
||
# MIT License
|
||
#
|
||
# Permission is hereby granted, free of charge, to any person obtaining
|
||
# a copy of this software and associated documentation files (the
|
||
# "Software"), to deal in the Software without restriction, including
|
||
# without limitation the rights to use, copy, modify, merge, publish,
|
||
# distribute, sublicense, and/or sell copies of the Software, and to
|
||
# permit persons to whom the Software is furnished to do so, subject to
|
||
# the following conditions:
|
||
#
|
||
# The above copyright notice and this permission notice shall be
|
||
# included in all copies or substantial portions of the Software.
|
||
#
|
||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
#
|
||
#
|
||
|
||
# This software is licensed to you under the GNU General Public
|
||
# License as published by the Free Software Foundation; either version
|
||
# 2 of the License (GPLv2) or (at your option) any later version.
|
||
# There is NO WARRANTY for this software, express or implied,
|
||
# including the implied warranties of MERCHANTABILITY,
|
||
# NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
|
||
# have received a copy of GPLv2 along with this software; if not, see
|
||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
|
||
|
||
require 'apipie-bindings'
|
||
require 'hammer_cli'
|
||
require 'katello_api'
|
||
require 'foreman_api'
|
||
require 'json'
|
||
require 'csv'
|
||
|
||
module HammerCLICsv
|
||
class BaseCommand < HammerCLI::AbstractCommand
|
||
class BaseCommand < HammerCLI::Apipie::Command
|
||
|
||
NAME = 'Name'
|
||
COUNT = 'Count'
|
||
... | ... | |
end
|
||
end
|
||
|
||
@init_options = {
|
||
:base_url => option_server || HammerCLI::Settings.get(:host),
|
||
:username => option_username || HammerCLI::Settings.get(:username),
|
||
:password => option_password || HammerCLI::Settings.get(:password)
|
||
}
|
||
|
||
@k_system_api ||= KatelloApi::Resources::System.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_systemgroup_api ||= KatelloApi::Resources::SystemGroup.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_environment_api ||= KatelloApi::Resources::Environment.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_contentview_api ||= KatelloApi::Resources::ContentView.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_provider_api ||= KatelloApi::Resources::Provider.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_product_api ||= KatelloApi::Resources::Product.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_repository_api ||= KatelloApi::Resources::Repository.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_contentviewdefinition_api ||= KatelloApi::Resources::ContentViewDefinition.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_subscription_api ||= KatelloApi::Resources::Subscription.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_organization_api ||= KatelloApi::Resources::Organization.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
@k_activationkey_api ||= KatelloApi::Resources::ActivationKey.new(@init_options.merge({:base_url => "#{@init_options[:base_url]}"}))
|
||
|
||
@f_architecture_api ||= ForemanApi::Resources::Architecture.new(@init_options)
|
||
@f_domain_api ||= ForemanApi::Resources::Domain.new(@init_options)
|
||
@f_environment_api ||= ForemanApi::Resources::Environment.new(@init_options)
|
||
@f_filter_api ||= ForemanApi::Resources::Filter.new(@init_options)
|
||
@f_host_api ||= ForemanApi::Resources::Host.new(@init_options)
|
||
@f_location_api ||= ForemanApi::Resources::Location.new(@init_options)
|
||
@f_operatingsystem_api ||= ForemanApi::Resources::OperatingSystem.new(@init_options)
|
||
@f_organization_api ||= ForemanApi::Resources::Organization.new(@init_options)
|
||
@f_permission_api ||= ForemanApi::Resources::Permission.new(@init_options)
|
||
@f_partitiontable_api ||= ForemanApi::Resources::Ptable.new(@init_options)
|
||
@f_puppetfacts_api ||= ForemanApi::Resources::FactValue.new(@init_options)
|
||
@f_report_api ||= ForemanApi::Resources::Report.new(@init_options)
|
||
@f_role_api ||= ForemanApi::Resources::Role.new(@init_options)
|
||
@f_user_api ||= ForemanApi::Resources::User.new(@init_options)
|
||
@api = ApipieBindings::API.new({
|
||
:uri => option_server || HammerCLI::Settings.get(:csv, :host),
|
||
:username => option_username || HammerCLI::Settings.get(:csv, :username),
|
||
:password => option_password || HammerCLI::Settings.get(:csv, :password),
|
||
:api_version => 2
|
||
})
|
||
|
||
option_csv_export? ? export : import
|
||
HammerCLI::EX_OK
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @organizations[options[:name]]
|
||
if !options[:id]
|
||
organization = @f_organization_api.index({'search' => "title=\"#{options[:name]}\""})[0]['results']
|
||
organization = @api.resource(:organizations).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise RuntimeError, "Organization '#{options[:name]}' not found" if !organization || organization.empty?
|
||
options[:id] = organization[0]['id']
|
||
@organizations[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @organizations.key(options[:id])
|
||
if !options[:name]
|
||
organization = @f_organization_api.show({'id' => options[:id]})[0]
|
||
organization = @api.resource(:organizations).call(:show, {'id' => options[:id]})
|
||
raise "Organization 'id=#{options[:id]}' not found" if !organization || organization.empty?
|
||
options[:name] = organization['name']
|
||
@organizations[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @organizations[options[:name]]
|
||
if !options[:id]
|
||
organization = @k_organization_api.index({'search' => "title=\"#{options[:name]}\""})[0]['results']
|
||
organization = @api.resource(:organizations).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise RuntimeError, "Organization '#{options[:name]}' not found" if !organization || organization.empty?
|
||
options[:id] = organization[0]['label']
|
||
@organizations[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @organizations.key(options[:id])
|
||
if !options[:name]
|
||
organization = @k_organization_api.show({'id' => options[:id]})[0]
|
||
organization = @api.resource(:organizations).call(:show, {'id' => options[:id]})
|
||
raise "Organization 'id=#{options[:id]}' not found" if !organization || organization.empty?
|
||
options[:name] = organization['name']
|
||
@organizations[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @locations[options[:name]]
|
||
if !options[:id]
|
||
location = @f_location_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
|
||
location = @api.resource(:locations).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise RuntimeError, "Location '#{options[:name]}' not found" if !location || location.empty?
|
||
options[:id] = location[0]['id']
|
||
@locations[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @locations.key(options[:id])
|
||
if !options[:name]
|
||
location = @f_location_api.show({'id' => options[:id]})[0]
|
||
location = @api.resource(:locations).call(:show, {'id' => options[:id]})
|
||
raise "Location 'id=#{options[:id]}' not found" if !location || location.empty?
|
||
options[:name] = location['name']
|
||
@locations[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @roles[options[:name]]
|
||
if !options[:id]
|
||
role = @f_role_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
|
||
role = @api.resource(:roles).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise RuntimeError, "Role '#{options[:name]}' not found" if !role || role.empty?
|
||
options[:id] = role[0]['id']
|
||
@roles[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @roles.key(options[:id])
|
||
if !options[:name]
|
||
role = @f_role_api.show({'id' => options[:id]})[0]
|
||
role = @api.resource(:roles).call(:show, {'id' => options[:id]})
|
||
raise "Role 'id=#{options[:id]}' not found" if !role || role.empty?
|
||
options[:name] = role['name']
|
||
@roles[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @permissions[options[:name]]
|
||
if !options[:id]
|
||
permission = @f_permission_api.index({'name' => options[:name]})[0]['results']
|
||
permission = @api.resource(:permissions).call(:index, {'name' => options[:name]})['results']
|
||
raise RuntimeError, "Permission '#{options[:name]}' not found" if !permission || permission.empty?
|
||
options[:id] = permission[0]['id']
|
||
@permissions[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @permissions.key(options[:id])
|
||
if !options[:name]
|
||
permission = @f_permission_api.show({'id' => options[:id]})[0]
|
||
permission = @api.resource(:permissions).call(:show, {'id' => options[:id]})
|
||
raise "Permission 'id=#{options[:id]}' not found" if !permission || permission.empty?
|
||
options[:name] = permission['name']
|
||
@permissions[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @filters[options[:name]]
|
||
if !options[:id]
|
||
filter = @f_filter_api.index({'search' => "role=\"#{role}\" and search=\"#{options[:name]}\""})[0]['results']
|
||
filter = @api.resource(:filters).call(:index, {'search' => "role=\"#{role}\" and search=\"#{options[:name]}\""})['results']
|
||
if !filter || filter.empty?
|
||
options[:id] = nil
|
||
else
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @filters.key(options[:id])
|
||
if !options[:name]
|
||
filter = @f_filter_api.show({'id' => options[:id]})[0]
|
||
filter = @api.resource(:filters).call(:show, {'id' => options[:id]})
|
||
raise "Filter 'id=#{options[:id]}' not found" if !filter || filter.empty?
|
||
options[:name] = filter['name']
|
||
@filters[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @environments[options[:name]]
|
||
if !options[:id]
|
||
environment = @f_environment_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
|
||
environment = @api.resource(:environments).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise "Puppet environment '#{options[:name]}' not found" if !environment || environment.empty?
|
||
options[:id] = environment[0]['id']
|
||
@environments[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @environments.key(options[:id])
|
||
if !options[:name]
|
||
environment = @f_environment_api.show({'id' => options[:id]})[0]
|
||
environment = @api.resource(:environments).call(:show, {'id' => options[:id]})
|
||
raise "Puppet environment '#{options[:name]}' not found" if !environment || environment.empty?
|
||
options[:name] = environment['name']
|
||
@environments[options[:name]] = options[:id]
|
||
... | ... | |
if !options[:id]
|
||
(osname, major, minor) = split_os_name(options[:name])
|
||
search = "name=\"#{osname}\" and major=\"#{major}\" and minor=\"#{minor}\""
|
||
operatingsystems = @f_operatingsystem_api.index({'search' => search})[0]['results']
|
||
operatingsystems = @api.resource(:operatingsystems).call(:index, {'search' => search})['results']
|
||
operatingsystem = operatingsystems[0]
|
||
raise "Operating system '#{options[:name]}' not found" if !operatingsystem || operatingsystem.empty?
|
||
options[:id] = operatingsystem['id']
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @operatingsystems.key(options[:id])
|
||
if !options[:name]
|
||
operatingsystem = @f_operatingsystem_api.show({'id' => options[:id]})[0]
|
||
operatingsystem = @api.resource(:operatingsystems).call(:show, {'id' => options[:id]})
|
||
raise "Operating system 'id=#{options[:id]}' not found" if !operatingsystem || operatingsystem.empty?
|
||
options[:name] = build_os_name(operatingsystem['name'],
|
||
operatingsystem['major'],
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @architectures[options[:name]]
|
||
if !options[:id]
|
||
architecture = @f_architecture_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
|
||
architecture = @api.resource(:architectures).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise "Architecture '#{options[:name]}' not found" if !architecture || architecture.empty?
|
||
options[:id] = architecture[0]['id']
|
||
@architectures[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @architectures.key(options[:id])
|
||
if !options[:name]
|
||
architecture = @f_architecture_api.show({'id' => options[:id]})[0]
|
||
architecture = @api.resource(:architectures).call(:show, {'id' => options[:id]})
|
||
raise "Architecture 'id=#{options[:id]}' not found" if !architecture || architecture.empty?
|
||
options[:name] = architecture['name']
|
||
@architectures[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @domains[options[:name]]
|
||
if !options[:id]
|
||
domain = @f_domain_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
|
||
domain = @api.resource(:domains).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise "Domain '#{options[:name]}' not found" if !domain || domain.empty?
|
||
options[:id] = domain[0]['id']
|
||
@domains[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @domains.key(options[:id])
|
||
if !options[:name]
|
||
domain = @f_domain_api.show({'id' => options[:id]})[0]
|
||
domain = @api.resource(:domains).call(:show, {'id' => options[:id]})
|
||
raise "Domain 'id=#{options[:id]}' not found" if !domain || domain.empty?
|
||
options[:name] = domain['name']
|
||
@domains[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @ptables[options[:name]]
|
||
if !options[:id]
|
||
ptable = @f_partitiontable_api.index({'search' => "name=\"#{options[:name]}\""})[0]['results']
|
||
ptable = @api.resource(:ptables).call(:index, {'search' => "name=\"#{options[:name]}\""})['results']
|
||
raise "Partition table '#{options[:name]}' not found" if !ptable || ptable.empty?
|
||
options[:id] = ptable[0]['id']
|
||
@ptables[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @ptables.key(options[:id])
|
||
if !options[:name]
|
||
ptable = @f_partitiontable_api.show({'id' => options[:id]})[0]
|
||
ptable = @api.resource(:ptables).call(:show, {'id' => options[:id]})
|
||
options[:name] = ptable['name']
|
||
@ptables[options[:name]] = options[:id]
|
||
end
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @environments[organization][options[:name]]
|
||
if !options[:id]
|
||
@k_environment_api.index({'organization_id' => katello_organization(:name => organization)})[0]['results'].each do |environment|
|
||
@api.resource(:environments).call(:index, {'organization_id' => katello_organization(:name => organization)})['results'].each do |environment|
|
||
@environments[organization][environment['name']] = environment['id']
|
||
end
|
||
options[:id] = @environments[organization][options[:name]]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @environments.key(options[:id])
|
||
if !options[:name]
|
||
environment = @k_environment_api.show({'id' => options[:id]})[0]
|
||
environment = @api.resource(:environments).call(:show, {'id' => options[:id]})
|
||
raise "Lifecycle environment '#{options[:name]}' not found" if !environment || environment.empty?
|
||
options[:name] = environment['name']
|
||
@environments[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @contentviews[organization][options[:name]]
|
||
if !options[:id]
|
||
@k_contentview_api.index({'organization_id' => katello_organization(:name => organization)})[0]['results'].each do |contentview|
|
||
@api.resource(:contentviews).call(:index, {'organization_id' => katello_organization(:name => organization)})['results'].each do |contentview|
|
||
@contentviews[organization][contentview['name']] = contentview['id']
|
||
end
|
||
options[:id] = @contentviews[organization][options[:name]]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @contentviews.key(options[:id])
|
||
if !options[:name]
|
||
contentview = @k_contentview_api.show({'id' => options[:id]})[0]
|
||
contentview = @api.resource(:contentviews).call(:show, {'id' => options[:id]})
|
||
raise "Puppet contentview '#{options[:name]}' not found" if !contentview || contentview.empty?
|
||
options[:name] = contentview['name']
|
||
@contentviews[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @subscriptions[organization][options[:name]]
|
||
if !options[:id]
|
||
results = @k_subscription_api.index({
|
||
results = @api.resource(:subscriptions).call(:index, {
|
||
'organization_id' => katello_organization(:name => organization),
|
||
'search' => "name:\"#{options[:name]}\""
|
||
})[0]
|
||
})
|
||
raise "No subscriptions match '#{options[:name]}'" if results['subtotal'] == 0
|
||
raise "Too many subscriptions match '#{options[:name]}'" if results['subtotal'] > 1
|
||
subscription = results['results'][0]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @subscriptions.key(options[:id])
|
||
if !options[:name]
|
||
subscription = @k_subscription_api.show({'id' => options[:id]})[0]
|
||
subscription = @api.resource(:subscriptions).call(:show, {'id' => options[:id]})
|
||
raise "Subscription '#{options[:name]}' not found" if !subscription || subscription.empty?
|
||
options[:name] = subscription['name']
|
||
@subscriptions[options[:name]] = options[:id]
|
||
... | ... | |
return nil if options[:name].nil? || options[:name].empty?
|
||
options[:id] = @systemgroups[organization][options[:name]]
|
||
if !options[:id]
|
||
@k_systemgroup_api.index({
|
||
@api.resource(:systemgroups).call(:index, {
|
||
'organization_id' => katello_organization(:name => organization),
|
||
'search' => "name:\"#{options[:name]}\""
|
||
})[0]['results'].each do |systemgroup|
|
||
})['results'].each do |systemgroup|
|
||
@systemgroups[organization][systemgroup['name']] = systemgroup['id'] if systemgroup
|
||
end
|
||
options[:id] = @systemgroups[organization][options[:name]]
|
||
... | ... | |
return nil if options[:id].nil?
|
||
options[:name] = @systemgroups.key(options[:id])
|
||
if !options[:name]
|
||
systemgroup = @k_systemgroup_api.show({'id' => options[:id]})[0]
|
||
systemgroup = @api.resource(:systemgroups).call(:show, {'id' => options[:id]})
|
||
raise "System group '#{options[:name]}' not found" if !systemgroup || systemgroup.empty?
|
||
options[:name] = systemgroup['name']
|
||
@systemgroups[options[:name]] = options[:id]
|
Also available in: Unified diff
cv-updates - a lot of updates and clean up
+ GPLv2 in files
+ updated to new dynamic apipie bindings
+ fixed domain and puppet environments associating to organizations