Class: OsCtld::Container::RunConfiguration
- Inherits:
-
Object
- Object
- OsCtld::Container::RunConfiguration
- Includes:
- OsCtl::Lib::Utils::File, OsCtl::Lib::Utils::Log, Lockable
- Defined in:
- lib/osctld/container/run_configuration.rb
Instance Attribute Summary collapse
-
#aborted ⇒ Object
writeonly
Sets the attribute aborted.
-
#arch ⇒ Object
readonly
Returns the value of attribute arch.
-
#cpu_package ⇒ Object
Returns the value of attribute cpu_package.
- #ct ⇒ Container readonly
-
#dataset ⇒ Object
readonly
Returns the value of attribute dataset.
-
#dist_network_configured ⇒ Object
Returns the value of attribute dist_network_configured.
-
#distribution ⇒ Object
readonly
Returns the value of attribute distribution.
-
#init_pid ⇒ Object
Returns the value of attribute init_pid.
-
#mounted ⇒ Object
protected
Returns the value of attribute mounted.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
Instance Method Summary collapse
- #aborted? ⇒ Boolean
- #assets(add) ⇒ Object
-
#boot_from(dataset, distribution, version, arch, destroy_dataset_on_stop: false) ⇒ Object
Set custom boot dataset.
- #destroy ⇒ Object
- #destroy_dataset_on_stop? ⇒ Boolean
-
#dir ⇒ String
Countainer dataset mountpoint.
- #dir_path ⇒ Object protected
- #dist_configure_network? ⇒ Boolean
- #dump ⇒ Object
- #exist? ⇒ Boolean
- #file_path ⇒ Object protected
-
#initialize(ct, load_conf: true) ⇒ RunConfiguration
constructor
A new instance of RunConfiguration.
- #load_conf(from_file: true) ⇒ Object
-
#mount(force: false) ⇒ Object
Mount the container’s dataset.
-
#mounted?(force: false) ⇒ Boolean
Check if the container’s dataset is mounted.
- #reboot? ⇒ Boolean
-
#request_reboot ⇒ Object
After the current container run stops, start it again.
-
#rootfs ⇒ String
Container rootfs path.
- #runtime_rootfs ⇒ Object
- #save ⇒ Object
Methods included from Lockable
#exclusively, included, #inclusively, #init_lock, #lock, #unlock
Constructor Details
#initialize(ct, load_conf: true) ⇒ RunConfiguration
Returns a new instance of RunConfiguration.
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/osctld/container/run_configuration.rb', line 28 def initialize(ct, load_conf: true) init_lock @ct = ct @cpu_package = nil @init_pid = nil @aborted = false @do_reboot = false @dist_network_configured = false self.load_conf(from_file: load_conf) end |
Instance Attribute Details
#aborted=(value) ⇒ Object (writeonly)
Sets the attribute aborted
118 119 120 |
# File 'lib/osctld/container/run_configuration.rb', line 118 def aborted=(value) @aborted = value end |
#arch ⇒ Object (readonly)
Returns the value of attribute arch
23 24 25 |
# File 'lib/osctld/container/run_configuration.rb', line 23 def arch @arch end |
#cpu_package ⇒ Object
Returns the value of attribute cpu_package
24 25 26 |
# File 'lib/osctld/container/run_configuration.rb', line 24 def cpu_package @cpu_package end |
#ct ⇒ Container (readonly)
21 22 23 |
# File 'lib/osctld/container/run_configuration.rb', line 21 def ct @ct end |
#dataset ⇒ Object (readonly)
Returns the value of attribute dataset
23 24 25 |
# File 'lib/osctld/container/run_configuration.rb', line 23 def dataset @dataset end |
#dist_network_configured ⇒ Object
Returns the value of attribute dist_network_configured
24 25 26 |
# File 'lib/osctld/container/run_configuration.rb', line 24 def dist_network_configured @dist_network_configured end |
#distribution ⇒ Object (readonly)
Returns the value of attribute distribution
23 24 25 |
# File 'lib/osctld/container/run_configuration.rb', line 23 def distribution @distribution end |
#init_pid ⇒ Object
Returns the value of attribute init_pid
24 25 26 |
# File 'lib/osctld/container/run_configuration.rb', line 24 def init_pid @init_pid end |
#mounted ⇒ Object (protected)
Returns the value of attribute mounted
201 202 203 |
# File 'lib/osctld/container/run_configuration.rb', line 201 def mounted @mounted end |
#version ⇒ Object (readonly)
Returns the value of attribute version
23 24 25 |
# File 'lib/osctld/container/run_configuration.rb', line 23 def version @version end |
Class Method Details
.load(ct) ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/osctld/container/run_configuration.rb', line 11 def self.load(ct) ctrc = new(ct, load_conf: false) return unless ctrc.exist? ctrc.load_conf ctrc end |
Instance Method Details
#aborted? ⇒ Boolean
120 121 122 |
# File 'lib/osctld/container/run_configuration.rb', line 120 def aborted? @aborted end |
#assets(add) ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/osctld/container/run_configuration.rb', line 39 def assets(add) add.file( file_path, desc: 'Container runtime configuration', user: 0, group: 0, mode: 0o400, optional: true ) end |
#boot_from(dataset, distribution, version, arch, destroy_dataset_on_stop: false) ⇒ Object
Set custom boot dataset
60 61 62 63 64 65 66 67 68 |
# File 'lib/osctld/container/run_configuration.rb', line 60 def boot_from(dataset, distribution, version, arch, destroy_dataset_on_stop: false) exclusively do @dataset = dataset @distribution = distribution @version = version @arch = arch @destroy_dataset_on_stop = destroy_dataset_on_stop end end |
#destroy ⇒ Object
193 194 195 196 197 |
# File 'lib/osctld/container/run_configuration.rb', line 193 def destroy File.unlink(file_path) rescue Errno::ENOENT # ignore end |
#destroy_dataset_on_stop? ⇒ Boolean
70 71 72 |
# File 'lib/osctld/container/run_configuration.rb', line 70 def destroy_dataset_on_stop? inclusively { @destroy_dataset_on_stop } end |
#dir ⇒ String
Countainer dataset mountpoint
76 77 78 |
# File 'lib/osctld/container/run_configuration.rb', line 76 def dir dataset.mountpoint end |
#dir_path ⇒ Object (protected)
203 204 205 |
# File 'lib/osctld/container/run_configuration.rb', line 203 def dir_path File.join(ct.pool.ct_dir, ct.id) end |
#dist_configure_network? ⇒ Boolean
133 134 135 136 137 |
# File 'lib/osctld/container/run_configuration.rb', line 133 def dist_configure_network? inclusively do !dist_network_configured && can_dist_configure_network? end end |
#dump ⇒ Object
143 144 145 146 147 148 149 150 151 152 |
# File 'lib/osctld/container/run_configuration.rb', line 143 def dump { 'dataset' => dataset.to_s, 'distribution' => distribution, 'version' => version, 'arch' => arch, 'cpu_package' => cpu_package, 'destroy_dataset_on_stop' => destroy_dataset_on_stop? } end |
#exist? ⇒ Boolean
139 140 141 |
# File 'lib/osctld/container/run_configuration.rb', line 139 def exist? File.exist?(file_path) end |
#file_path ⇒ Object (protected)
207 208 209 |
# File 'lib/osctld/container/run_configuration.rb', line 207 def file_path File.join(dir_path, 'config.yml') end |
#load_conf(from_file: true) ⇒ Object
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/osctld/container/run_configuration.rb', line 154 def load_conf(from_file: true) cfg = if from_file && File.exist?(file_path) OsCtl::Lib::ConfigFile.load_yaml_file(file_path) else {} end @dataset = if cfg['dataset'] OsCtl::Lib::Zfs::Dataset.new(cfg['dataset'], base: cfg['dataset']) else ct.dataset end @distribution = cfg['distribution'] || ct.distribution @version = cfg['version'] || ct.version @arch = cfg['arch'] || ct.arch @cpu_package = cfg['cpu_package'] @destroy_dataset_on_stop = if cfg.has_key?('destroy_dataset_on_stop') cfg['destroy_dataset_on_stop'] else false end nil end |
#mount(force: false) ⇒ Object
Mount the container’s dataset
93 94 95 96 97 98 |
# File 'lib/osctld/container/run_configuration.rb', line 93 def mount(force: false) return if !force && mounted dataset.mount(recursive: true) self.mounted = true end |
#mounted?(force: false) ⇒ Boolean
Check if the container’s dataset is mounted
103 104 105 106 107 108 109 |
# File 'lib/osctld/container/run_configuration.rb', line 103 def mounted?(force: false) if force || mounted.nil? self.mounted = dataset.mounted?(recursive: true) else mounted end end |
#reboot? ⇒ Boolean
129 130 131 |
# File 'lib/osctld/container/run_configuration.rb', line 129 def reboot? @do_reboot end |
#request_reboot ⇒ Object
After the current container run stops, start it again
125 126 127 |
# File 'lib/osctld/container/run_configuration.rb', line 125 def request_reboot @do_reboot = true end |
#rootfs ⇒ String
Container rootfs path
82 83 84 85 86 87 88 |
# File 'lib/osctld/container/run_configuration.rb', line 82 def rootfs File.join(dir, 'private') rescue SystemCommandFailed # Dataset for staged containers does not have to exist yet, relevant # primarily for ct show/list nil end |
#runtime_rootfs ⇒ Object
111 112 113 114 115 116 |
# File 'lib/osctld/container/run_configuration.rb', line 111 def runtime_rootfs pid = init_pid raise 'init_pid not set' unless pid File.join('/proc', pid.to_s, 'root') end |
#save ⇒ Object
181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/osctld/container/run_configuration.rb', line 181 def save begin Dir.mkdir(dir_path) rescue Errno::EEXIST # ignore end regenerate_file(file_path, 0o400) do |new| new.write(OsCtl::Lib::ConfigFile.dump_yaml(dump)) end end |