machinery-tool 1.22.1 → 1.22.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.git_revision +1 -1
- data/NEWS +10 -0
- data/bin/machinery +1 -1
- data/lib/analyze_changed_config_files_diffs_task.rb +6 -6
- data/lib/autoyast.rb +2 -2
- data/lib/build_task.rb +10 -7
- data/lib/cli.rb +1005 -801
- data/lib/compare_task.rb +11 -7
- data/lib/comparison.rb +2 -2
- data/lib/config_base.rb +1 -1
- data/lib/config_task.rb +1 -1
- data/lib/containerize_task.rb +3 -3
- data/lib/containerized_app.rb +1 -1
- data/lib/copy_task.rb +1 -1
- data/lib/current_user.rb +1 -1
- data/lib/deploy_task.rb +6 -4
- data/lib/diff_widget.rb +67 -63
- data/lib/docker_system.rb +12 -8
- data/lib/dpkg_database.rb +1 -1
- data/lib/element_filter.rb +7 -4
- data/lib/exceptions.rb +23 -5
- data/lib/export_task.rb +1 -1
- data/lib/exporter.rb +1 -1
- data/lib/file_diff.rb +1 -1
- data/lib/file_scope.rb +1 -1
- data/lib/file_validator.rb +7 -4
- data/lib/filter.rb +97 -93
- data/lib/filter_option_parser.rb +2 -2
- data/lib/hint.rb +64 -59
- data/lib/html.rb +1 -1
- data/lib/inspect_task.rb +12 -12
- data/lib/inspector.rb +3 -3
- data/lib/json_validation_error_cleaner.rb +1 -1
- data/lib/json_validator.rb +4 -4
- data/lib/kiwi_config.rb +8 -4
- data/lib/list_task.rb +10 -9
- data/lib/local_system.rb +11 -5
- data/lib/logged_cheetah.rb +1 -1
- data/lib/man_task.rb +10 -6
- data/lib/managed_files_database.rb +1 -1
- data/lib/manifest.rb +5 -5
- data/lib/migration.rb +16 -10
- data/lib/mountpoints.rb +1 -1
- data/lib/move_task.rb +1 -1
- data/lib/remote_system.rb +7 -7
- data/lib/remove_task.rb +1 -1
- data/lib/renderer.rb +177 -172
- data/lib/rpm.rb +4 -4
- data/lib/rpm_database.rb +1 -1
- data/lib/scope.rb +2 -2
- data/lib/scope_file_access_archive.rb +1 -1
- data/lib/scope_file_access_flat.rb +1 -1
- data/lib/scope_file_store.rb +1 -1
- data/lib/serve_html_task.rb +6 -2
- data/lib/server.rb +19 -12
- data/lib/show_task.rb +10 -6
- data/lib/static_html.rb +1 -1
- data/lib/system.rb +10 -10
- data/lib/system_description.rb +14 -13
- data/lib/system_description_memory_store.rb +1 -1
- data/lib/system_description_store.rb +9 -9
- data/lib/tarball.rb +8 -2
- data/lib/upgrade_format_task.rb +11 -6
- data/lib/validate_task.rb +2 -2
- data/lib/version.rb +1 -1
- data/lib/workload_mapper.rb +2 -2
- data/lib/workload_mapper_dsl.rb +1 -1
- data/lib/zypper.rb +40 -17
- data/machinery-helper/machinery_helper.go +35 -16
- data/machinery-helper/version.go +1 -1
- data/man/generated/machinery.1.gz +0 -0
- data/manual/site/sitemap.xml +24 -24
- data/plugins/changed_config_files/changed_config_files_inspector.rb +59 -56
- data/plugins/changed_config_files/changed_config_files_model.rb +23 -21
- data/plugins/changed_config_files/changed_config_files_renderer.rb +56 -52
- data/plugins/changed_managed_files/changed_managed_files_inspector.rb +52 -50
- data/plugins/changed_managed_files/changed_managed_files_model.rb +23 -21
- data/plugins/changed_managed_files/changed_managed_files_renderer.rb +43 -39
- data/plugins/environment/environment_inspector.rb +25 -23
- data/plugins/environment/environment_model.rb +5 -3
- data/plugins/groups/groups_inspector.rb +30 -28
- data/plugins/groups/groups_model.rb +18 -17
- data/plugins/groups/groups_renderer.rb +29 -25
- data/plugins/os/os_inspector.rb +120 -118
- data/plugins/os/os_model.rb +139 -134
- data/plugins/os/os_renderer.rb +13 -9
- data/plugins/packages/packages_inspector.rb +99 -86
- data/plugins/packages/packages_model.rb +35 -34
- data/plugins/packages/packages_renderer.rb +47 -39
- data/plugins/patterns/patterns_inspector.rb +70 -68
- data/plugins/patterns/patterns_model.rb +19 -18
- data/plugins/patterns/patterns_renderer.rb +36 -32
- data/plugins/repositories/repositories_inspector.rb +162 -156
- data/plugins/repositories/repositories_model.rb +50 -49
- data/plugins/repositories/repositories_renderer.rb +48 -44
- data/plugins/repositories/schema/system-description-repositories.schema-v10.json +0 -1
- data/plugins/services/services_inspector.rb +187 -176
- data/plugins/services/services_model.rb +37 -36
- data/plugins/services/services_renderer.rb +28 -24
- data/plugins/unmanaged_files/unmanaged_files_inspector.rb +102 -99
- data/plugins/unmanaged_files/unmanaged_files_model.rb +64 -56
- data/plugins/unmanaged_files/unmanaged_files_renderer.rb +44 -40
- data/plugins/users/users_inspector.rb +67 -65
- data/plugins/users/users_model.rb +37 -36
- data/plugins/users/users_renderer.rb +31 -27
- data/schema/migrations/migrate1to2.rb +1 -1
- data/schema/migrations/migrate2to3.rb +1 -1
- data/schema/migrations/migrate3to4.rb +1 -1
- data/schema/migrations/migrate4to5.rb +1 -1
- data/schema/migrations/migrate5to6.rb +1 -1
- data/schema/migrations/migrate6to7.rb +1 -1
- data/schema/migrations/migrate7to8.rb +1 -1
- data/schema/migrations/migrate8to9.rb +1 -1
- data/schema/migrations/migrate9to10.rb +1 -1
- metadata +2 -2
data/lib/tarball.rb
CHANGED
@@ -16,13 +16,19 @@
|
|
16
16
|
# you may find current contact information at www.suse.com
|
17
17
|
|
18
18
|
# Represents a tarball, possibly gzipped.
|
19
|
-
class Tarball
|
19
|
+
class Machinery::Tarball
|
20
20
|
def initialize(file)
|
21
21
|
@file = file
|
22
22
|
end
|
23
23
|
|
24
24
|
def list
|
25
|
-
output = LoggedCheetah.run(
|
25
|
+
output = Machinery::LoggedCheetah.run(
|
26
|
+
"tar",
|
27
|
+
"tvf",
|
28
|
+
@file,
|
29
|
+
"--quoting-style=literal",
|
30
|
+
stdout: :capture
|
31
|
+
)
|
26
32
|
|
27
33
|
output.lines.map do |line|
|
28
34
|
mode, user_and_group, size, _date, _time, rest = line.split(" ", 6)
|
data/lib/upgrade_format_task.rb
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# To contact SUSE about this file by physical or electronic mail,
|
16
16
|
# you may find current contact information at www.suse.com
|
17
17
|
|
18
|
-
class UpgradeFormatTask
|
18
|
+
class Machinery::UpgradeFormatTask
|
19
19
|
def upgrade(store, name, options = {})
|
20
20
|
if !options[:all] && !store.list.include?(name)
|
21
21
|
raise Machinery::Errors::SystemDescriptionNotFound.new(
|
@@ -34,15 +34,20 @@ class UpgradeFormatTask
|
|
34
34
|
|
35
35
|
descriptions.each do |description|
|
36
36
|
begin
|
37
|
-
hash = Manifest.load(description, store.manifest_path(description)).to_hash
|
37
|
+
hash = Machinery::Manifest.load(description, store.manifest_path(description)).to_hash
|
38
38
|
Machinery.logger.info "Upgrading description '#{description}'"
|
39
39
|
Machinery::Ui.print "Reading '#{description}' ... "
|
40
|
-
migrated = Migration.migrate_description(
|
40
|
+
migrated = Machinery::Migration.migrate_description(
|
41
|
+
store,
|
42
|
+
description,
|
43
|
+
force: options[:force]
|
44
|
+
)
|
41
45
|
|
42
46
|
if migrated
|
43
47
|
migrations_done += 1
|
44
|
-
Machinery::Ui.puts "Successfully upgraded from version"
|
45
|
-
" #{hash["meta"]["format_version"]}
|
48
|
+
Machinery::Ui.puts "Successfully upgraded from version"\
|
49
|
+
" #{hash["meta"]["format_version"]}"\
|
50
|
+
" to #{Machinery::SystemDescription::CURRENT_FORMAT_VERSION}."
|
46
51
|
end
|
47
52
|
rescue StandardError => e
|
48
53
|
errors.push("Upgrading description '#{description}' failed:\n#{e}")
|
@@ -53,7 +58,7 @@ class UpgradeFormatTask
|
|
53
58
|
unless errors.empty?
|
54
59
|
Machinery.logger.error errors.join("\n")
|
55
60
|
exception = Machinery::Errors::UpgradeFailed.new("\n" + errors.join("\n") +
|
56
|
-
Hint.to_string(:upgrade_format_force, name: name || "--all"))
|
61
|
+
Machinery::Ui::Hint.to_string(:upgrade_format_force, name: name || "--all"))
|
57
62
|
raise exception
|
58
63
|
end
|
59
64
|
|
data/lib/validate_task.rb
CHANGED
@@ -15,9 +15,9 @@
|
|
15
15
|
# To contact SUSE about this file by physical or electronic mail,
|
16
16
|
# you may find current contact information at www.suse.com
|
17
17
|
|
18
|
-
class ValidateTask
|
18
|
+
class Machinery::ValidateTask
|
19
19
|
def validate(store, name)
|
20
|
-
SystemDescription.load!(name, store)
|
20
|
+
Machinery::SystemDescription.load!(name, store)
|
21
21
|
Machinery::Ui.puts "Validation succeeded."
|
22
22
|
rescue
|
23
23
|
Machinery::Ui.puts "Validation failed."
|
data/lib/version.rb
CHANGED
data/lib/workload_mapper.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
#
|
15
15
|
# To contact SUSE about this file by physical or electronic mail,
|
16
16
|
# you may find current contact information at www.suse.com
|
17
|
-
class WorkloadMapper
|
17
|
+
class Machinery::WorkloadMapper
|
18
18
|
def save(workloads, path)
|
19
19
|
workloads.each do |workload, config|
|
20
20
|
FileUtils.mkdir_p(File.join(path, workload))
|
@@ -75,7 +75,7 @@ class WorkloadMapper
|
|
75
75
|
workloads = {}
|
76
76
|
|
77
77
|
Dir["#{File.expand_path(workload_mapper_path)}/*"].each do |workload_dir|
|
78
|
-
mapper = WorkloadMapperDSL.new(system_description)
|
78
|
+
mapper = Machinery::WorkloadMapperDSL.new(system_description)
|
79
79
|
workload = mapper.check_clue(File.read(File.join(workload_dir, "clue.rb")))
|
80
80
|
workloads.merge!(workload.to_h)
|
81
81
|
end
|
data/lib/workload_mapper_dsl.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
#
|
15
15
|
# To contact SUSE about this file by physical or electronic mail,
|
16
16
|
# you may find current contact information at www.suse.com
|
17
|
-
class WorkloadMapperDSL
|
17
|
+
class Machinery::WorkloadMapperDSL
|
18
18
|
attr_reader :system, :name, :service, :parameters, :data
|
19
19
|
|
20
20
|
def initialize(system)
|
data/lib/zypper.rb
CHANGED
@@ -21,33 +21,44 @@
|
|
21
21
|
# for running zypper in an isolated environment using 'Zypper.isolated'.
|
22
22
|
# That way Machinery can safely add repositories and download packages without
|
23
23
|
# polluting the host.
|
24
|
-
class Zypper
|
24
|
+
class Machinery::Zypper
|
25
25
|
attr_accessor :zypper_options
|
26
26
|
attr_accessor :zypp_config
|
27
|
+
attr_accessor :zypp_base
|
27
28
|
|
28
29
|
class <<self
|
29
30
|
def isolated(options = {}, &block)
|
30
|
-
|
31
|
-
|
31
|
+
zypper = Machinery::Zypper.new
|
32
|
+
zypper.zypp_base = Dir.mktmpdir("machinery_zypper")
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
zypper.zypper_options = [
|
35
|
+
"--non-interactive",
|
36
|
+
"--no-gpg-checks",
|
37
|
+
"--root", zypper.zypp_base
|
38
|
+
]
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
block.call(zypper)
|
40
|
+
if options[:arch]
|
41
|
+
zypper.zypp_config = create_zypp_config(zypper.zypp_base, options[:arch])
|
44
42
|
end
|
43
|
+
|
44
|
+
block.call(zypper)
|
45
|
+
ensure
|
46
|
+
clean_up(zypper)
|
45
47
|
end
|
46
48
|
|
47
49
|
private
|
48
50
|
|
49
|
-
def
|
50
|
-
|
51
|
+
def clean_up(zypper)
|
52
|
+
unless zypper.zypp_base =~ /^\/tmp\/machinery_zypper/
|
53
|
+
raise("The zypper base directory is not inside of '/tmp'. Aborting...")
|
54
|
+
end
|
55
|
+
cmd = ["rm", "-rf", zypper.zypp_base]
|
56
|
+
cmd = cmd.insert(0, "sudo") if zypper.contains_mountable_repos?
|
57
|
+
Machinery::LoggedCheetah.run(*cmd)
|
58
|
+
end
|
59
|
+
|
60
|
+
def create_zypp_config(zypp_base, arch)
|
61
|
+
zypp_dir = File.join(zypp_base, "/etc/zypp")
|
51
62
|
zypp_config = File.join(zypp_dir, "zypp.conf")
|
52
63
|
|
53
64
|
FileUtils.mkdir_p(zypp_dir)
|
@@ -70,7 +81,7 @@ class Zypper
|
|
70
81
|
end
|
71
82
|
|
72
83
|
def refresh
|
73
|
-
call_zypper "refresh"
|
84
|
+
call_zypper "refresh", sudo: contains_mountable_repos?
|
74
85
|
end
|
75
86
|
|
76
87
|
def download_package(package)
|
@@ -86,15 +97,27 @@ class Zypper
|
|
86
97
|
[found[1].to_i, found[2].to_i, found[3].to_i] if found
|
87
98
|
end
|
88
99
|
|
100
|
+
def contains_mountable_repos?
|
101
|
+
files = Dir.glob(File.join(@zypp_base, "etc/zypp/repos.d", "*"))
|
102
|
+
files.any? do |file|
|
103
|
+
File.readlines(file).any? do |line|
|
104
|
+
line.start_with?("baseurl=nfs://", "baseurl=nfs4://", "baseurl=smb://", "baseurl=cifs://")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
89
109
|
private
|
90
110
|
|
91
111
|
def call_zypper(*args)
|
112
|
+
sudo = args.last.delete(:sudo) if args.last.is_a?(Hash)
|
113
|
+
|
92
114
|
cmd = ["zypper"]
|
115
|
+
cmd.unshift("sudo") if sudo
|
93
116
|
cmd += @zypper_options if @zypper_options
|
94
117
|
cmd += args
|
95
118
|
|
96
119
|
with_env "ZYPP_CONF" => @zypp_config do
|
97
|
-
LoggedCheetah.run(*cmd)
|
120
|
+
Machinery::LoggedCheetah.run(*cmd)
|
98
121
|
end
|
99
122
|
end
|
100
123
|
end
|
@@ -199,8 +199,8 @@ func getManagedFiles() (map[string]string, map[string]bool) {
|
|
199
199
|
return files, dirs
|
200
200
|
}
|
201
201
|
|
202
|
-
func assembleJSON(
|
203
|
-
jsonMap := map[string]interface{}{"extracted": false, "files":
|
202
|
+
func assembleJSON(unmanagedFilesList interface{}) string {
|
203
|
+
jsonMap := map[string]interface{}{"extracted": false, "files": unmanagedFilesList}
|
204
204
|
json, _ := json.MarshalIndent(jsonMap, " ", " ")
|
205
205
|
return string(json)
|
206
206
|
}
|
@@ -299,7 +299,7 @@ func dirInfo(path string) (size int64, fileCount int, dirCount int) {
|
|
299
299
|
if f.IsDir() {
|
300
300
|
dirCount++
|
301
301
|
fileCount--
|
302
|
-
if _, ok := IgnoreList[path
|
302
|
+
if _, ok := IgnoreList[path+f.Name()]; !ok {
|
303
303
|
subSize, subFiles, subDirs := dirInfo(path + f.Name() + "/")
|
304
304
|
size += subSize
|
305
305
|
fileCount += subFiles
|
@@ -352,6 +352,36 @@ func printVersion() {
|
|
352
352
|
os.Exit(0)
|
353
353
|
}
|
354
354
|
|
355
|
+
func getUnmanagedFilesList(files []string, unmanagedFiles map[string]string, extractMetadataFlag *bool) []UnmanagedFile {
|
356
|
+
unmanagedFilesList := make([]UnmanagedFile, len(unmanagedFiles))
|
357
|
+
i := 0
|
358
|
+
for j := range files {
|
359
|
+
// only add accessible files
|
360
|
+
if _, err := os.Lstat(files[j]); isAccessible(err) {
|
361
|
+
entry := UnmanagedFile{}
|
362
|
+
entry.Name = files[j]
|
363
|
+
entry.Type = unmanagedFiles[files[j]]
|
364
|
+
|
365
|
+
if *extractMetadataFlag {
|
366
|
+
amendPathAttributes(&entry, unmanagedFiles[files[j]])
|
367
|
+
}
|
368
|
+
|
369
|
+
unmanagedFilesList[i] = entry
|
370
|
+
i++
|
371
|
+
} else {
|
372
|
+
fmt.Fprintln(os.Stderr, files[j], "was not accessible. Skipping.")
|
373
|
+
}
|
374
|
+
}
|
375
|
+
return unmanagedFilesList[0:i]
|
376
|
+
}
|
377
|
+
|
378
|
+
func isAccessible(err error) bool {
|
379
|
+
return err == nil ||
|
380
|
+
(os.IsNotExist(err) == false &&
|
381
|
+
os.IsPermission(err) == false &&
|
382
|
+
strings.Contains(err.Error(), "no such device") == false)
|
383
|
+
}
|
384
|
+
|
355
385
|
// IgnoreList includes mounts and any other file type that will be ignored when
|
356
386
|
// evaluating the unmanaged files in a system.
|
357
387
|
var IgnoreList = map[string]bool{}
|
@@ -405,19 +435,8 @@ func main() {
|
|
405
435
|
}
|
406
436
|
sort.Strings(files)
|
407
437
|
|
408
|
-
|
409
|
-
for j := range files {
|
410
|
-
entry := UnmanagedFile{}
|
411
|
-
entry.Name = files[j]
|
412
|
-
entry.Type = unmanagedFiles[files[j]]
|
413
|
-
|
414
|
-
if *extractMetadataFlag {
|
415
|
-
amendPathAttributes(&entry, unmanagedFiles[files[j]])
|
416
|
-
}
|
417
|
-
|
418
|
-
unmanagedFilesMap[j] = entry
|
419
|
-
}
|
438
|
+
unmanagedFilesList := getUnmanagedFilesList(files, unmanagedFiles, extractMetadataFlag)
|
420
439
|
|
421
|
-
json := assembleJSON(
|
440
|
+
json := assembleJSON(unmanagedFilesList)
|
422
441
|
fmt.Println(json)
|
423
442
|
}
|
data/machinery-helper/version.go
CHANGED
Binary file
|
data/manual/site/sitemap.xml
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
<url>
|
6
6
|
<loc>None/docs/</loc>
|
7
|
-
<lastmod>2016-
|
7
|
+
<lastmod>2016-11-16</lastmod>
|
8
8
|
<changefreq>daily</changefreq>
|
9
9
|
</url>
|
10
10
|
|
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
<url>
|
14
14
|
<loc>None/machinery_main_general.1/</loc>
|
15
|
-
<lastmod>2016-
|
15
|
+
<lastmod>2016-11-16</lastmod>
|
16
16
|
<changefreq>daily</changefreq>
|
17
17
|
</url>
|
18
18
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
<url>
|
22
22
|
<loc>None/machinery_main_scopes.1/</loc>
|
23
|
-
<lastmod>2016-
|
23
|
+
<lastmod>2016-11-16</lastmod>
|
24
24
|
<changefreq>daily</changefreq>
|
25
25
|
</url>
|
26
26
|
|
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
<url>
|
30
30
|
<loc>None/machinery_main_usecases.1/</loc>
|
31
|
-
<lastmod>2016-
|
31
|
+
<lastmod>2016-11-16</lastmod>
|
32
32
|
<changefreq>daily</changefreq>
|
33
33
|
</url>
|
34
34
|
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
<url>
|
38
38
|
<loc>None/machinery_main_security_implications.1/</loc>
|
39
|
-
<lastmod>2016-
|
39
|
+
<lastmod>2016-11-16</lastmod>
|
40
40
|
<changefreq>daily</changefreq>
|
41
41
|
</url>
|
42
42
|
|
@@ -45,115 +45,115 @@
|
|
45
45
|
|
46
46
|
<url>
|
47
47
|
<loc>None/machinery-analyze.1/</loc>
|
48
|
-
<lastmod>2016-
|
48
|
+
<lastmod>2016-11-16</lastmod>
|
49
49
|
<changefreq>daily</changefreq>
|
50
50
|
</url>
|
51
51
|
|
52
52
|
<url>
|
53
53
|
<loc>None/machinery-build.1/</loc>
|
54
|
-
<lastmod>2016-
|
54
|
+
<lastmod>2016-11-16</lastmod>
|
55
55
|
<changefreq>daily</changefreq>
|
56
56
|
</url>
|
57
57
|
|
58
58
|
<url>
|
59
59
|
<loc>None/machinery-compare.1/</loc>
|
60
|
-
<lastmod>2016-
|
60
|
+
<lastmod>2016-11-16</lastmod>
|
61
61
|
<changefreq>daily</changefreq>
|
62
62
|
</url>
|
63
63
|
|
64
64
|
<url>
|
65
65
|
<loc>None/machinery-config.1/</loc>
|
66
|
-
<lastmod>2016-
|
66
|
+
<lastmod>2016-11-16</lastmod>
|
67
67
|
<changefreq>daily</changefreq>
|
68
68
|
</url>
|
69
69
|
|
70
70
|
<url>
|
71
71
|
<loc>None/machinery-copy.1/</loc>
|
72
|
-
<lastmod>2016-
|
72
|
+
<lastmod>2016-11-16</lastmod>
|
73
73
|
<changefreq>daily</changefreq>
|
74
74
|
</url>
|
75
75
|
|
76
76
|
<url>
|
77
77
|
<loc>None/machinery-deploy.1/</loc>
|
78
|
-
<lastmod>2016-
|
78
|
+
<lastmod>2016-11-16</lastmod>
|
79
79
|
<changefreq>daily</changefreq>
|
80
80
|
</url>
|
81
81
|
|
82
82
|
<url>
|
83
83
|
<loc>None/machinery-export-autoyast.1/</loc>
|
84
|
-
<lastmod>2016-
|
84
|
+
<lastmod>2016-11-16</lastmod>
|
85
85
|
<changefreq>daily</changefreq>
|
86
86
|
</url>
|
87
87
|
|
88
88
|
<url>
|
89
89
|
<loc>None/machinery-export-kiwi.1/</loc>
|
90
|
-
<lastmod>2016-
|
90
|
+
<lastmod>2016-11-16</lastmod>
|
91
91
|
<changefreq>daily</changefreq>
|
92
92
|
</url>
|
93
93
|
|
94
94
|
<url>
|
95
95
|
<loc>None/machinery-export-html.1/</loc>
|
96
|
-
<lastmod>2016-
|
96
|
+
<lastmod>2016-11-16</lastmod>
|
97
97
|
<changefreq>daily</changefreq>
|
98
98
|
</url>
|
99
99
|
|
100
100
|
<url>
|
101
101
|
<loc>None/machinery-inspect.1/</loc>
|
102
|
-
<lastmod>2016-
|
102
|
+
<lastmod>2016-11-16</lastmod>
|
103
103
|
<changefreq>daily</changefreq>
|
104
104
|
</url>
|
105
105
|
|
106
106
|
<url>
|
107
107
|
<loc>None/machinery-inspect-container.1/</loc>
|
108
|
-
<lastmod>2016-
|
108
|
+
<lastmod>2016-11-16</lastmod>
|
109
109
|
<changefreq>daily</changefreq>
|
110
110
|
</url>
|
111
111
|
|
112
112
|
<url>
|
113
113
|
<loc>None/machinery-list.1/</loc>
|
114
|
-
<lastmod>2016-
|
114
|
+
<lastmod>2016-11-16</lastmod>
|
115
115
|
<changefreq>daily</changefreq>
|
116
116
|
</url>
|
117
117
|
|
118
118
|
<url>
|
119
119
|
<loc>None/machinery-man.1/</loc>
|
120
|
-
<lastmod>2016-
|
120
|
+
<lastmod>2016-11-16</lastmod>
|
121
121
|
<changefreq>daily</changefreq>
|
122
122
|
</url>
|
123
123
|
|
124
124
|
<url>
|
125
125
|
<loc>None/machinery-move.1/</loc>
|
126
|
-
<lastmod>2016-
|
126
|
+
<lastmod>2016-11-16</lastmod>
|
127
127
|
<changefreq>daily</changefreq>
|
128
128
|
</url>
|
129
129
|
|
130
130
|
<url>
|
131
131
|
<loc>None/machinery-remove.1/</loc>
|
132
|
-
<lastmod>2016-
|
132
|
+
<lastmod>2016-11-16</lastmod>
|
133
133
|
<changefreq>daily</changefreq>
|
134
134
|
</url>
|
135
135
|
|
136
136
|
<url>
|
137
137
|
<loc>None/machinery-serve.1/</loc>
|
138
|
-
<lastmod>2016-
|
138
|
+
<lastmod>2016-11-16</lastmod>
|
139
139
|
<changefreq>daily</changefreq>
|
140
140
|
</url>
|
141
141
|
|
142
142
|
<url>
|
143
143
|
<loc>None/machinery-show.1/</loc>
|
144
|
-
<lastmod>2016-
|
144
|
+
<lastmod>2016-11-16</lastmod>
|
145
145
|
<changefreq>daily</changefreq>
|
146
146
|
</url>
|
147
147
|
|
148
148
|
<url>
|
149
149
|
<loc>None/machinery-upgrade-format.1/</loc>
|
150
|
-
<lastmod>2016-
|
150
|
+
<lastmod>2016-11-16</lastmod>
|
151
151
|
<changefreq>daily</changefreq>
|
152
152
|
</url>
|
153
153
|
|
154
154
|
<url>
|
155
155
|
<loc>None/machinery-validate.1/</loc>
|
156
|
-
<lastmod>2016-
|
156
|
+
<lastmod>2016-11-16</lastmod>
|
157
157
|
<changefreq>daily</changefreq>
|
158
158
|
</url>
|
159
159
|
|