Module: Vagrant::LXC::Action

Defined in:
lib/vagrant-lxc/action.rb,
lib/vagrant-lxc/action/boot.rb,
lib/vagrant-lxc/action/create.rb,
lib/vagrant-lxc/action/destroy.rb,
lib/vagrant-lxc/action/forced_halt.rb,
lib/vagrant-lxc/action/forward_ports.rb,
lib/vagrant-lxc/action/warn_networks.rb,
lib/vagrant-lxc/action/compress_rootfs.rb,
lib/vagrant-lxc/action/destroy_confirm.rb,
lib/vagrant-lxc/action/private_networks.rb,
lib/vagrant-lxc/action/handle_box_metadata.rb,
lib/vagrant-lxc/action/setup_package_files.rb,
lib/vagrant-lxc/action/prepare_nfs_settings.rb,
lib/vagrant-lxc/action/clear_forwarded_ports.rb,
lib/vagrant-lxc/action/prepare_nfs_valid_ids.rb,
lib/vagrant-lxc/action/fetch_ip_with_lxc_info.rb,
lib/vagrant-lxc/action/gc_private_network_bridges.rb

Defined Under Namespace

Classes: Boot, ClearForwardedPorts, CompressRootFS, Create, Destroy, DestroyConfirm, FetchIpWithLxcInfo, ForcedHalt, ForwardPorts, GcPrivateNetworkBridges, HandleBoxMetadata, PrepareNFSSettings, PrepareNFSValidIds, PrivateNetworks, SetupPackageFiles, WarnNetworks

Constant Summary collapse

Builtin =

Shortcuts

Vagrant::Action::Builtin
Builder =
Vagrant::Action::Builder

Class Method Summary collapse

Class Method Details

.action_bootObject

This action boots the VM, assuming the VM is in a state that requires a bootup (i.e. not saved).



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/vagrant-lxc/action.rb', line 45

def self.action_boot
  Builder.new.tap do |b|
    b.use Builtin::Provision
    b.use Builtin::EnvSet, :port_collision_repair => true
    b.use Builtin::HandleForwardedPortCollisions
    b.use PrepareNFSValidIds
    b.use Builtin::SyncedFolderCleanup
    b.use Builtin::SyncedFolders
    b.use PrepareNFSSettings
    b.use Builtin::SetHostname
    b.use WarnNetworks
    b.use ForwardPorts
    b.use PrivateNetworks
    b.use Boot
    b.use Builtin::WaitForCommunicator
  end
end

.action_destroyObject

This is the action that is primarily responsible for completely freeing the resources of the underlying virtual machine.



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/vagrant-lxc/action.rb', line 139

def self.action_destroy
  Builder.new.tap do |b|
    b.use Builtin::Call, Builtin::IsState, :not_created do |env1, b2|
      if env1[:result]
        b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_created")
        next
      end

      b2.use Builtin::Call, DestroyConfirm do |env2, b3|
        if env2[:result]
          b3.use Builtin::ConfigValidate
          b3.use Builtin::EnvSet, :force_halt => true
          b3.use action_halt
          b3.use Destroy
          b3.use Builtin::ProvisionerCleanup
        else
          b3.use Builtin::Message, I18n.t("vagrant_lxc.messages.will_not_destroy")
        end
      end
    end
  end
end

.action_haltObject

This is the action that is primarily responsible for halting the virtual machine, gracefully or by force.



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/vagrant-lxc/action.rb', line 118

def self.action_halt
  Builder.new.tap do |b|
    b.use Builtin::Call, Builtin::IsState, :not_created do |env, b2|
      if env[:result]
        b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_created")
        next
      end

      b2.use ClearForwardedPorts
      b2.use GcPrivateNetworkBridges
      b2.use Builtin::Call, Builtin::GracefulHalt, :stopped, :running do |env2, b3|
        if !env2[:result]
          b3.use ForcedHalt
        end
      end
    end
  end
end

.action_packageObject

This action packages the virtual machine into a single box file.



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/vagrant-lxc/action.rb', line 163

def self.action_package
  Builder.new.tap do |b|
    b.use Builtin::Call, Builtin::IsState, :not_created do |env1, b2|
      if env1[:result]
        b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_created")
        next
      end

      b2.use action_halt
      b2.use CompressRootFS
      b2.use SetupPackageFiles
      b2.use Vagrant::Action::General::Package
    end
  end
end

.action_provisionObject

This action just runs the provisioners on the machine.



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/vagrant-lxc/action.rb', line 64

def self.action_provision
  Builder.new.tap do |b|
    b.use Builtin::ConfigValidate
    b.use Builtin::Call, Builtin::IsState, :not_created do |env1, b2|
      if env1[:result]
        b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_created")
        next
      end

      b2.use Builtin::Call, Builtin::IsState, :running do |env2, b3|
        if !env2[:result]
          b3.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_running")
          next
        end

        b3.use Builtin::Provision
      end
    end
  end
end

.action_reloadObject

This action is responsible for reloading the machine, which brings it down, sucks in new configuration, and brings the machine back up with the new configuration.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/vagrant-lxc/action.rb', line 28

def self.action_reload
  Builder.new.tap do |b|
    b.use Builtin::Call, Builtin::IsState, :not_created do |env1, b2|
      if env1[:result]
        b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_created")
        next
      end

      b2.use Builtin::ConfigValidate
      b2.use action_halt
      b2.use action_start
    end
  end
end

.action_sshObject

This is the action that will exec into an SSH shell.



190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/vagrant-lxc/action.rb', line 190

def self.action_ssh
  Builder.new.tap do |b|
    b.use Builtin::ConfigValidate
    b.use Builtin::Call, Builtin::IsState, :not_created do |env, b2|
      if env[:result]
        b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_created")
        next
      end

      b2.use Builtin::Call, Builtin::IsState, :running do |env1, b3|
        if !env1[:result]
          b3.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_running")
          next
        end

        b3.use Builtin::SSHExec
      end
    end
  end
end

.action_ssh_ipObject

This action is called to read the IP of the container. The IP found is expected to be put into the ‘:machine_ip` key.



181
182
183
184
185
186
187
# File 'lib/vagrant-lxc/action.rb', line 181

def self.action_ssh_ip
  Builder.new.tap do |b|
    b.use Builtin::Call, Builtin::ConfigValidate do |env, b2|
      b2.use FetchIpWithLxcInfo
    end
  end
end

.action_ssh_runObject

This is the action that will run a single SSH command.



212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# File 'lib/vagrant-lxc/action.rb', line 212

def self.action_ssh_run
  Builder.new.tap do |b|
    b.use Builtin::ConfigValidate
    b.use Builtin::Call, Builtin::IsState, :not_created do |env, b2|
      if env[:result]
        b2.use Builtin::Message, I18n.t("vagrant_lxc.messages.not_created")
        next
      end

      b2.use Builtin::Call, Builtin::IsState, :running do |env1, b3|
        if !env1[:result]
          raise Vagrant::Errors::VMNotRunningError
          next
        end

        b3.use Builtin::SSHRun
      end
    end
  end
end

.action_startObject

This action starts a container, assuming it is already created and exists. A precondition of this action is that the container exists.



87
88
89
90
91
92
93
94
95
96
97
# File 'lib/vagrant-lxc/action.rb', line 87

def self.action_start
  Builder.new.tap do |b|
    b.use Builtin::ConfigValidate
    b.use Builtin::BoxCheckOutdated
    b.use Builtin::Call, Builtin::IsState, :running do |env, b2|
      # If the VM is running, then our work here is done, exit
      next if env[:result]
      b2.use action_boot
    end
  end
end

.action_upObject

This action brings the machine up from nothing, including creating the container, configuring metadata, and booting.



101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/vagrant-lxc/action.rb', line 101

def self.action_up
  Builder.new.tap do |b|
    b.use Builtin::ConfigValidate
    b.use Builtin::Call, Builtin::IsState, :not_created do |env, b2|
      # If the VM is NOT created yet, then do the setup steps
      if env[:result]
        b2.use Builtin::HandleBox
        b2.use HandleBoxMetadata
        b2.use Create
      end
    end
    b.use action_start
  end
end