Project

General

Profile

Download (8.29 KB) Statistics
| Branch: | Tag: | Revision:
module HammerCLIKatello
module ContentViewComponentBase
class ComponentCommand < HammerCLIKatello::SingleResourceCommand
include OrganizationOptions
include CompositeContentViewNameResolvable

def get_components(composite_content_view_id)
component_options = {:composite_content_view_id => composite_content_view_id}
components = ::HammerCLIForeman.foreman_resource(:content_view_components).call(:index,
component_options)
components["results"] || []
end

def get_component_by_name_or_id(composite_content_view_id, options)
get_components(composite_content_view_id).find do |cv|
cv["content_view"]["name"] == options[:name] || cv["content_view"]["id"] == options[:id]
end
end
end

class ComponentUpdateCommand < ComponentCommand
option "--component-content-view-id", "COMPONENT_CONTENT_VIEW_ID",
_("Content View identifier of the component who's latest version is desired"),
:attribute_name => :option_content_view_id

option "--component-content-view", "COMPONENT_CONTENT_VIEW_NAME",
_("Content View name of the component who's latest version is desired"),
:attribute_name => :option_content_view_name

option "--component-content-view-version-id", "COMPONENT_CONTENT_VIEW_VERSION_ID",
_("Content View Version identifier of the component"),
:attribute_name => :option_component_content_view_version_id

option "--component-content-view-version", "COMPONENT_CONTENT_VIEW_VERSION_VERSION",
_("Content View Version number of the component. " \
"Either use this or --component-content-view-version-id option"),
:attribute_name => :option_component_content_view_version_version

option ["--latest"], :flag,
_("Select the latest version of the components content view is desired")

def fetch_cv
cv = option_content_view_id
if cv.nil? && option_content_view_name
cv_search_options = org_options.merge(
HammerCLI.option_accessor_name('name') => option_content_view_name)

cv = resolver.content_view_id(cv_search_options)
end
cv
end

def fetch_cvv(cv)
cvv = option_component_content_view_version_id
if cvv.nil?
if option_component_content_view_version_version && cv.nil?
raise _("Please provide --component-content-view-id")
end
if option_component_content_view_version_version.nil?
raise _("Please provide --component-content-view-version-id or" \
" --component-content-view-version or" \
" --latest for the latest version")
end

cvv_search_options = org_options.merge(
HammerCLI.option_accessor_name("content_view_id") => cv,
HammerCLI.option_accessor_name("version") =>
option_component_content_view_version_version
)

cvv = resolver.content_view_version_id(cvv_search_options)
end
cvv
end
end
end

class ContentViewComponent < HammerCLIKatello::Command
resource :content_view_components
command_name 'component'
desc 'View and manage components'

class ListCommand < HammerCLIKatello::ListCommand
include OrganizationOptions
include CompositeContentViewNameResolvable
output do
field :id, _("Id")
field :content_view_name, _("Name")
field :version, _("Version")
field :current_version, _("Current Version")
field :version_id, _("Version Id")
end

def extend_data(mod)
if mod['latest']
mod['content_view_name'] = mod["content_view"]["name"]
mod['version'] = _("Latest")
if mod['content_view_version']
mod['current_version'] = mod['content_view_version']['version']
mod['version_id'] = "#{mod['content_view_version']['id']} (#{_('Latest')})"
else
mod['current_version'] = _("No Published Version")
end
else
mod['content_view_name'] = mod["content_view"]["name"]
mod['version'] = mod['content_view_version']['version']
mod['version_id'] = mod['content_view_version']['id']
end
mod
end

build_options
end

class AddComponents < HammerCLIKatello::ContentViewComponentBase::ComponentUpdateCommand
resource :content_view_components, :add_components
command_name "add"

def request_params
super.tap do |opts|
cv = fetch_cv
component = {
latest: (option_latest? || false)
}
component[:content_view_id] = cv if cv
component[:content_view_version_id] = fetch_cvv(cv) unless component[:latest]
opts['components'] = [component]
end
end

success_message _("Component added to content view.")
failure_message _("Could not add the component")

build_options do |o|
o.expand.except(:components, :content_view_versions, :content_views)
o.without(:components, :content_view_versions, :content_views)
end
end

class UpdateCommand < HammerCLIKatello::ContentViewComponentBase::ComponentUpdateCommand
action :update
command_name "update"

success_message _("Content view component updated.")
failure_message _("Could not update the content view component")

def update_id(opts)
return if opts["id"] || opts["content_view_id"].nil? ||
opts["composite_content_view_id"].nil?

component = get_component_by_name_or_id(opts["composite_content_view_id"],
:id => opts["content_view_id"])
opts["id"] = component["id"] if component
end

def request_params
super.tap do |opts|
cv = fetch_cv
opts["content_view_id"] = cv if cv
update_id(opts)

if option_latest?
opts["latest"] = true
opts.delete("content_view_version_id")
else
opts["latest"] = false
opts["content_view_version_id"] = fetch_cvv(opts["content_view_id"])
end
end
end

build_options do |o|
o.expand.except(:content_view_versions, :content_view_version_id)
o.without(:content_view_versions, :content_view_version_id)
end
end

class RemoveComponents < HammerCLIKatello::ContentViewComponentBase::ComponentCommand
action :remove_components
command_name "remove"

option ["--component-content-views"], "COMPONENT_CONTENT_VIEW_NAMES",
_("Array of component content view names to remove. Comma separated list of values"),
:attribute_name => :option_component_content_view_names

option ["--component-content-view-ids"], "COMPONENT_CONTENT_VIEW_IDs",
_("Array of component content view identfiers to remove. Comma separated list of values"),
:attribute_name => :option_component_content_view_ids

success_message _("Components removed from content view.")
failure_message _("Could not remove the components")

def component_content_view_names
return [] unless option_component_content_view_names
option_component_content_view_names.split(",").map(&:strip)
end

def component_content_view_ids
return [] unless option_component_content_view_ids
option_component_content_view_ids.split(",").map(&:strip)
end

def request_params
super.tap do |opts|
if option_component_content_view_names || option_component_content_view_ids
component_cv_names = component_content_view_names
component_cv_ids = component_content_view_ids
component_ids = opts["component_ids"] || []
components = get_components(opts["composite_content_view_id"])
components.each do |comp|
if component_cv_names.include?(comp["content_view"]["name"]) ||
component_cv_ids.include?(comp["content_view"]["id"].to_s)
component_ids << comp["id"]
end
end
opts["component_ids"] = component_ids.uniq
end
end
end

build_options
end

autoload_subcommands
end
end
(8-8/55)