Class: Yast::AutoinstClassClass

Inherits:
Module
  • Object
show all
Includes:
Logger
Defined in:
../../src/modules/AutoinstClass.rb

Constant Summary

MERGE_XSLT_PATH =
"/usr/share/autoinstall/xslt/merge.xslt"

Instance Method Summary (collapse)

Instance Method Details

- (Object) AutoinstClass

Constructor

Returns:

  • void



107
108
109
110
111
112
# File '../../src/modules/AutoinstClass.rb', line 107

def AutoinstClass
  classSetup
  Compat()
  Read()
  nil
end

- (String) class_dir=(newdir)

Changes the directory of classes definitions.

AutoinstConfig#classDir= is called to set the new value in the configuration. It does not check if the directory exists or is accessible.

Returns:

  • (String)

    path of the new directory.



97
98
99
100
101
102
# File '../../src/modules/AutoinstClass.rb', line 97

def class_dir=(newdir)
  AutoinstConfig.classDir = newdir
  @classDir = newdir
  @classPath = File.join(@classDir, @class_file)
  newdir
end

- (Object) classDirChanged(newdir)

Changes the directory and reads the class definitions

Parameters:

  • Path (String)

    of the new directory

Returns:

  • nil

See Also:

  • class_dir=


83
84
85
86
87
88
# File '../../src/modules/AutoinstClass.rb', line 83

def classDirChanged(newdir)
  self.class_dir = newdir
  Compat()
  Read()
  nil
end

- (Object) Compat

we are doing some compatibility fixes here and move from one /etc/autoinstall/classes.xml to multiple classes.xml files, one for each repository



68
69
70
71
72
73
74
75
76
# File '../../src/modules/AutoinstClass.rb', line 68

def Compat
  if !class_file_exists? && compat_class_file_exists?
    log.info "Compat: #{@classPath} not found but #{compat_class_file} exists"
    new_classes_map = { "classes" => read_old_classes }
    log.info "creating #{new_classes_map}"
    XML.YCPToXMLFile(:class, new_classes_map, @classPath)
  end
  nil
end

- (Array<Hash>) Export

Exports configuration

Returns:

  • (Array<Hash>)

    Copy of the configuration



177
178
179
# File '../../src/modules/AutoinstClass.rb', line 177

def Export
  deep_copy(@profile_conf)
end

- (void) Files

This method returns an undefined value.

Reads files from class directories



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File '../../src/modules/AutoinstClass.rb', line 135

def Files
  @confs = []
  @Classes.each do |class_|
    class_name_ = class_["name"] || "xxx"
    files_path = File.join(@classDir, class_name_)
    files = Convert.convert(SCR.Read(path(".target.dir"), files_path),
      :from => "any", :to   => "list <string>")

    next if files.nil?

    log.info "Files in class #{class_name_}: #{files}"
    new_confs = files.map { |f| { "class" => class_name_, "name" => f  }  }
    log.info "Configurations: #{new_confs}"
    @confs.concat(new_confs)
  end
  log.info "Configurations: #{@confs}"
  nil
end

- (String) findPath(name, class_)

Finds a profile path

Parameters:

  • string

    profile name

Returns:

  • (String)

    profile Path



47
48
49
50
51
# File '../../src/modules/AutoinstClass.rb', line 47

def findPath(name, class_)
  result = @confs.find { |c| c["name"] == name && c["class"] == class_ }
  result ||= { "class" => "", "name" => "default" }
  File.join(@classDir, result["class"], result["name"])
end

- (Object) Import(settings)

Imports configuration

Returns:

  • true



170
171
172
173
# File '../../src/modules/AutoinstClass.rb', line 170

def Import(settings)
  @profile_conf = deep_copy(settings)
  true
end

- (Object) main



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File '../../src/modules/AutoinstClass.rb', line 24

def main

  Yast.import "AutoinstConfig"
  Yast.import "XML"
  Yast.import "Summary"
  Yast.include self, "autoinstall/xml.rb"

  @classDir = AutoinstConfig.classDir
  @ClassConf = "/etc/autoinstall"
  @profile_conf = []
  @Profiles = []
  @Classes = []
  @deletedClasses = []
  @confs = []
  @class_file = "classes.xml"
  @classPath = File.join(@classDir, @class_file)

  AutoinstClass()
end

- (Object) MergeClasses(configuration, base_profile, resultFileName)

Merge classes



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File '../../src/modules/AutoinstClass.rb', line 116

def MergeClasses(configuration, base_profile, resultFileName)
  dontmerge_str = ""
  AutoinstConfig.dontmerge.each_with_index do |dm, i|
    dontmerge_str << " --param dontmerge#{i+1} \"'#{dm}'\" "
  end
  merge_command =
    "/usr/bin/xsltproc --novalid --param replace \"'false'\" #{dontmerge_str} --param with " \
    "\"'#{findPath(configuration["name"], configuration["class"])}'\"  " \
    "--output #{File.join(AutoinstConfig.tmpDir, resultFileName)}  " \
    "#{MERGE_XSLT_PATH} #{base_profile} "

  out = SCR.Execute(path(".target.bash_output"), merge_command, {})
  log.info "Merge command: #{merge_command}"
  log.info "Merge stdout: #{out["stdout"]}, stderr: #{out["stderr"]}"
  out
end

- (Object) Read

Reads classes



54
55
56
57
58
59
60
61
62
63
# File '../../src/modules/AutoinstClass.rb', line 54

def Read
  if SCR.Read(path(".target.size"), @classPath) != -1
    # TODO: use XML module
    classes_map = Convert.to_map(SCR.Read(path(".xml"), @classPath))
    @Classes = (classes_map && classes_map["classes"]) || []
  else
    @Classes = []
  end
  nil
end

- (Object) Save

Saves classes definitions



155
156
157
158
159
160
161
162
163
164
# File '../../src/modules/AutoinstClass.rb', line 155

def Save
  @deletedClasses.each do |c|
    to_del = "/bin/rm -rf #{File.join(AutoinstConfig.classDir, c)}"
    SCR.Execute(path(".target.bash"), to_del)
  end
  @deletedClasses = []
  tmp = { "classes" => @Classes }
  log.debug "saving classes: #{@classPath}"
  XML.YCPToXMLFile(:class, tmp, @classPath)
end

- (String) Summary

Builds the configuration summary

Returns:

  • (String)

    Configuration summary



183
184
185
186
187
188
189
190
# File '../../src/modules/AutoinstClass.rb', line 183

def Summary
  summary = ""
  @profile_conf.each do |conf|
    summary = Summary.AddHeader(summary, conf["class_name"] || "None")
    summary = Summary.AddLine(summary, conf["configuration"] || "None")
  end
  summary.empty? ? Summary.NotConfigured : summary
end