class HammerCLICsv::CsvCommand::DomainsCommand
Constants
- DESCRIPTION
- LOCATIONS
- ORGANIZATIONS
- PARAMETERS
- SEPARATOR
- SMART_PROXY
Public Instance Methods
create_domains_from_csv(line)
click to toggle source
# File lib/hammer_cli_csv/domains.rb, line 47 def create_domains_from_csv(line) dns_id = foreman_smart_proxy(:name => line[SMART_PROXY]) count(line[COUNT]).times do |number| name = namify(line[NAME], number) description = namify(line[DESCRIPTION], number) params = { 'domain' => { 'name' => name, 'fullname' => description, 'dns_id' => dns_id } } if !@existing.include? name print _("Creating domain '%{name}'...") % {:name => name} if option_verbose? domain = @api.resource(:domains).call(:create, params) else print _("Updating domain '%{name}'...") % {:name => name} if option_verbose? params['id'] = @existing[name] domain = @api.resource(:domains).call(:update, params) end update_organizations(line, domain) update_locations(line, domain) import_parameters(domain['id'], line[PARAMETERS]) puts _("done") if option_verbose? end end
export(csv)
click to toggle source
# File lib/hammer_cli_csv/domains.rb, line 15 def export(csv) csv << [NAME, ORGANIZATIONS, LOCATIONS, DESCRIPTION, SMART_PROXY, PARAMETERS] search_options = {:per_page => 999999} search_options['search'] = "organization=\"#{option_organization}\"" if option_organization search_options['search'] = "#{search_options['search']} AND #{option_search}" if option_search @api.resource(:domains).call(:index, search_options)['results'].each do |domain| domain = @api.resource(:domains).call(:show, {'id' => domain['id']}) raise "Domain 'id=#{domain['id']}' not found" if !domain || domain.empty? name = domain['name'] organizations = option_organization ? option_organization : export_column(domain, 'organizations', 'name') locations = export_column(domain, 'locations', 'name') description = domain['fullname'] capsule = foreman_smart_proxy(:id => domain['dns_id']) parameters = export_column(domain, 'parameters') do |parameter| "#{parameter['name']}#{SEPARATOR}#{parameter['value']}" end csv << [name, organizations, locations, description, capsule, parameters] end end
import()
click to toggle source
# File lib/hammer_cli_csv/domains.rb, line 36 def import @existing = {} @api.resource(:domains).call(:index, {:per_page => 999999})['results'].each do |domain| @existing[domain['name']] = domain['id'] if domain end thread_import do |line| create_domains_from_csv(line) end end
import_parameters(domain_id, parameters)
click to toggle source
# File lib/hammer_cli_csv/domains.rb, line 117 def import_parameters(domain_id, parameters) collect_column(parameters) do |parameter| (parameter_name, parameter_value) = parameter.split(SEPARATOR) results = @api.resource(:parameters).call(:index, { :domain_id => domain_id, :search => "name=\"#{parameter_name}\"" })['results'] params = { 'domain_id' => domain_id, 'parameter' => { 'name' => parameter_name, 'value' => parameter_value } } if results.empty? @api.resource(:parameters).call(:create, params) else params['id'] = results[0]['id'] @api.resource(:parameters).call(:update, params) end end end
update_locations(line, domain)
click to toggle source
# File lib/hammer_cli_csv/domains.rb, line 96 def update_locations(line, domain) return if line[LOCATIONS].nil? || line[LOCATIONS].empty? domains ||= {} CSV.parse_line(line[LOCATIONS]).each do |location| location_id = foreman_location(:name => location) if domains[location].nil? domains[location] = @api.resource(:locations).call(:show, {'id' => location_id})['domains'].collect do |existing_domain| existing_domain['id'] end end domains[location] += [domain['id']] if !domains[location].include? domain['id'] @api.resource(:locations).call(:update, { 'id' => location_id, 'location' => { 'domain_ids' => domains[location] } }) end end
update_organizations(line, domain)
click to toggle source
# File lib/hammer_cli_csv/domains.rb, line 76 def update_organizations(line, domain) domains ||= {} CSV.parse_line(line[ORGANIZATIONS]).each do |organization| organization_id = foreman_organization(:name => organization) if domains[organization].nil? domains[organization] = @api.resource(:organizations).call(:show, {'id' => organization_id})['domains'].collect do |existing_domain| existing_domain['id'] end end domains[organization] += [domain['id']] if !domains[organization].include? domain['id'] @api.resource(:organizations).call(:update, { 'id' => organization_id, 'organization' => { 'domain_ids' => domains[organization] } }) end end