class HammerCLICsv::CsvCommand::ProvisioningTemplatesCommand
Constants
- ASSOCIATIONS
- KIND
- LOCATIONS
- OPERATINGSYSTEMS
- ORGANIZATIONS
- TEMPLATE
Public Instance Methods
create_templates_from_csv(line)
click to toggle source
# File lib/hammer_cli_csv/provisioning_templates.rb, line 54 def create_templates_from_csv(line) organizations = collect_column(line[ORGANIZATIONS]) do |organization| foreman_organization(:name => organization) end if option_organization org_id = foreman_organization(:name => option_organization) return if org_id.nil? || !organizations.include?(org_id) organizations = [org_id] end locations = collect_column(line[LOCATIONS]) do |location| foreman_location(:name => location) end operatingsystems = collect_column(line[OPERATINGSYSTEMS]) do |operatingsystem| foreman_operatingsystem(:name => operatingsystem) end count(line[COUNT]).times do |number| name = namify(line[NAME], number) if !@existing.include? name print _("Creating provisioning template '%{name}'...") % {:name => name } if option_verbose? template_id = @api.resource(:config_templates).call(:create, { 'config_template' => { 'name' => name, 'snippet' => line[KIND] == 'snippet', 'template_kind_id' => line[KIND] == 'snippet' ? nil : foreman_template_kind(:name => line[KIND]), 'operatingsystem_ids' => operatingsystems, 'location_ids' => locations, 'template' => line[TEMPLATE] } })['id'] else print _("Updating provisioning template '%{name}'...") % {:name => name} if option_verbose? template_id = @api.resource(:config_templates).call(:update, { 'id' => @existing[name], 'config_template' => { 'name' => name, 'snippet' => line[KIND] == 'snippet', 'template_kind_id' => line[KIND] == 'snippet' ? nil : foreman_template_kind(:name => line[KIND]), 'operatingsystem_ids' => operatingsystems, 'location_ids' => locations, 'template' => line[TEMPLATE] } })['id'] end @existing[name] = template_id # Update associated resources @template_organizations ||= {} organizations.each do |organization_id| if @template_organizations[organization_id].nil? @template_organizations[organization_id] = @api.resource(:organizations).call(:show, { 'id' => organization_id })['config_templates'].collect do |template| template['id'] end end if !@template_organizations[organization_id].include? template_id @template_organizations[organization_id] << template_id @api.resource(:organizations).call(:update, { 'id' => organization_id, 'organization' => { 'config_template_ids' => @template_organizations[organization_id] } }) end end @template_locations ||= {} locations.each do |location_id| if @template_locations[location_id].nil? @template_locations[location_id] = @api.resource(:locations).call(:show, { 'id' => location_id })['config_templates'].collect do |template| template['id'] end end if !@template_locations[location_id].include? template_id @template_locations[location_id] += [template_id] @api.resource(:locations).call(:update, { 'id' => location_id, 'location' => { 'config_template_ids' => @template_locations[location_id] } }) end end puts _('done') if option_verbose? end end
export(csv)
click to toggle source
# File lib/hammer_cli_csv/provisioning_templates.rb, line 17 def export(csv) csv << [NAME, ORGANIZATIONS, LOCATIONS, OPERATINGSYSTEMS, ASSOCIATIONS, KIND, TEMPLATE] params = { :per_page => 999999 } params['search'] = "organization = \"#{option_organization}\"" if option_organization params['search'] = "#{params['search']} AND #{option_search}" if option_search @api.resource(:config_templates).call(:index, params)['results'].each do |template_id| template = @api.resource(:config_templates).call(:show, {:id => template_id['id']}) next if template['locked'] && !option_include_locked? name = template['name'] kind = template['snippet'] ? 'snippet' : template['template_kind_name'] organizations = export_column(template, 'organizations', 'name') locations = export_column(template, 'locations', 'name') operatingsystems = export_column(template, 'operatingsystems', 'fullname') # TODO: puppet environments for content views are not present in api # http://projects.theforeman.org/issues/10293 associations = export_associations(template) unless name == 'Boot disk iPXE - generic host' || name == 'Boot disk iPXE - host' csv << [name, organizations, locations, operatingsystems, associations, kind, template['template']] end end end
export_associations(template)
click to toggle source
# File lib/hammer_cli_csv/provisioning_templates.rb, line 144 def export_associations(template) return '' unless template['template_combinations'] values = CSV.generate do |column| column << template['template_combinations'].collect do |combo| "#{combo['hostgroup_name']}|#{combo['environment_name']}" end end values.delete!("\n") end
import()
click to toggle source
# File lib/hammer_cli_csv/provisioning_templates.rb, line 41 def import @existing = {} @api.resource(:config_templates).call(:index, { :per_page => 999999 })['results'].each do |template| @existing[template['name']] = template['id'] if template end thread_import do |line| create_templates_from_csv(line) end end