class HammerCLICsv::CsvCommand::RolesCommand
Constants
- LOCATIONS
- ORGANIZATIONS
- PERMISSIONS
- RESOURCE
- SEARCH
Public Instance Methods
create_roles_from_csv(line)
click to toggle source
# File lib/hammer_cli_csv/roles.rb, line 46 def create_roles_from_csv(line) permissions = collect_column(line[PERMISSIONS]) do |permission| foreman_permission(:name => permission) end organizations = collect_column(line[ORGANIZATIONS]) do |organization| foreman_organization(:name => organization) end locations = collect_column(line[LOCATIONS]) do |location| foreman_location(:name => location) end count(line[COUNT]).times do |number| name = namify(line[NAME], number) search = line[SEARCH] ? namify(line[SEARCH], number) : nil if !@existing_roles[name] print "Creating role '#{name}'..." if option_verbose? role = @api.resource(:roles).call(:create, { 'role' => { 'name' => name } }) @existing_roles[name] = role['id'] else print "Updating role '#{name}'..." if option_verbose? # Nothing to update on the role object itself, just filters below end filter_id = foreman_filter(name, line[RESOURCE], search) if !filter_id print " creating filter #{line[RESOURCE]}..." if option_verbose? @api.resource(:filters).call(:create, { 'filter' => { 'role_id' => @existing_roles[name], 'search' => search, 'unlimited' => search.nil? || search.empty?, 'organization_ids' => organizations, 'location_ids' => locations, 'permission_ids' => permissions }}) else print " updating filter #{line[RESOURCE]}..." @api.resource(:filters).call(:update, { 'id' => filter_id, 'filter' => { 'search' => search, 'unlimited' => search.nil? || search.empty?, 'organization_ids' => organizations, 'location_ids' => locations, 'permission_ids' => permissions } }) end puts 'done' if option_verbose? end end
export(csv)
click to toggle source
# File lib/hammer_cli_csv/roles.rb, line 13 def export(csv) csv << [NAME, RESOURCE, SEARCH, PERMISSIONS, ORGANIZATIONS, LOCATIONS] @api.resource(:roles).call(:index, {'per_page' => 999999})['results'].each do |role| @api.resource(:filters).call(:index, { 'per_page' => 999999, 'search' => "role=\"#{role['name']}\"" })['results'].each do |filter| filter = @api.resource(:filters).call(:show, 'id' => filter['id']) permissions = export_column(filter, 'permissions', 'name') organizations = export_column(filter, 'organizations', 'name') locations = export_column(filter, 'locations', 'name') csv << [role['name'], filter['resource_type'], filter['search'] || '', permissions, organizations, locations] end end end
import()
click to toggle source
# File lib/hammer_cli_csv/roles.rb, line 30 def import @existing_roles = {} @api.resource(:roles).call(:index, {'per_page' => 999999})['results'].each do |role| @existing_roles[role['name']] = role['id'] end @existing_filters = {} @api.resource(:filters).call(:index, {'per_page' => 999999})['results'].each do |role| @existing_filters[role['name']] = role['id'] end thread_import do |line| create_roles_from_csv(line) end end