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/created.rb,
lib/vagrant-lxc/action/destroy.rb,
lib/vagrant-lxc/action/message.rb,
lib/vagrant-lxc/action/disconnect.rb,
lib/vagrant-lxc/action/is_running.rb,
lib/vagrant-lxc/action/forced_halt.rb,
lib/vagrant-lxc/action/check_created.rb,
lib/vagrant-lxc/action/check_running.rb,
lib/vagrant-lxc/action/forward_ports.rb,
lib/vagrant-lxc/action/share_folders.rb,
lib/vagrant-lxc/action/compress_rootfs.rb,
lib/vagrant-lxc/action/destroy_confirm.rb,
lib/vagrant-lxc/action/handle_box_metadata.rb,
lib/vagrant-lxc/action/setup_package_files.rb,
lib/vagrant-lxc/action/clear_forwarded_ports.rb,
lib/vagrant-lxc/action/remove_temporary_files.rb,
lib/vagrant-lxc/action/fetch_ip_with_lxc_attach.rb,
lib/vagrant-lxc/action/fetch_ip_from_dnsmasq_leases.rb

Defined Under Namespace

Classes: Boot, CheckCreated, CheckRunning, ClearForwardedPorts, CompressRootFS, Create, Created, Destroy, DestroyConfirm, Disconnect, FetchIpFromDnsmasqLeases, FetchIpWithLxcAttach, ForcedHalt, ForwardPorts, HandleBoxMetadata, IsRunning, Message, RemoveTemporaryFiles, SetupPackageFiles, ShareFolders

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).



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

def self.action_boot
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::Provision
    b.use Vagrant::Action::Builtin::EnvSet, :port_collision_repair => true
    b.use Vagrant::Action::Builtin::HandleForwardedPortCollisions
    b.use ShareFolders
    b.use Vagrant::Action::Builtin::SetHostname
    b.use ForwardPorts
    b.use Boot
  end
end

.action_destroyObject

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



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/vagrant-lxc/action.rb', line 135

def self.action_destroy
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::Call, Created do |env1, b2|
      if !env1[:result]
        b2.use Message, :not_created
        next
      end

      b2.use Vagrant::Action::Builtin::Call, DestroyConfirm do |env2, b3|
        if env2[:result]
          b3.use Vagrant::Action::Builtin::ConfigValidate
          b3.use Vagrant::Action::Builtin::EnvSet, :force_halt => true
          b3.use action_halt
          b3.use Destroy
        else
          b3.use Message, :will_not_destroy
        end
      end
    end
  end
end

.action_fetch_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.



176
177
178
179
180
181
182
# File 'lib/vagrant-lxc/action.rb', line 176

def self.action_fetch_ip
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::ConfigValidate
    b.use FetchIpWithLxcAttach
    b.use FetchIpFromDnsmasqLeases
  end
end

.action_haltObject

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



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/vagrant-lxc/action.rb', line 113

def self.action_halt
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::Call, Created do |env, b2|
      if env[:result]
        # TODO: Remove this on / after 0.4
        b2.use Disconnect
        b2.use ClearForwardedPorts
        b2.use RemoveTemporaryFiles
        b2.use Vagrant::Action::Builtin::Call, Vagrant::Action::Builtin::GracefulHalt, :stopped, :running do |env2, b3|
          if !env2[:result]
            b3.use ForcedHalt
          end
        end
      else
        b2.use Message, :not_created
      end
    end
  end
end

.action_packageObject

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



158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/vagrant-lxc/action.rb', line 158

def self.action_package
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::Call, Created do |env1, b2|
      if !env1[:result]
        b2.use Message, :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.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/vagrant-lxc/action.rb', line 59

def self.action_provision
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::ConfigValidate
    b.use Vagrant::Action::Builtin::Call, Created do |env1, b2|
      if !env1[:result]
        b2.use Message, :not_created
        next
      end

      b2.use Vagrant::Action::Builtin::Call, IsRunning do |env2, b3|
        if !env2[:result]
          b3.use Message, :not_running
          next
        end

        b3.use Vagrant::Action::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
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::Call, Created do |env1, b2|
      if !env1[:result]
        b2.use Message, :not_created
        next
      end

      b2.use Vagrant::Action::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.



185
186
187
188
189
190
191
# File 'lib/vagrant-lxc/action.rb', line 185

def self.action_ssh
  Vagrant::Action::Builder.new.tap do |b|
    b.use CheckCreated
    b.use CheckRunning
    b.use Vagrant::Action::Builtin::SSHExec
  end
end

.action_ssh_runObject

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



194
195
196
197
198
199
200
# File 'lib/vagrant-lxc/action.rb', line 194

def self.action_ssh_run
  Vagrant::Action::Builder.new.tap do |b|
    b.use CheckCreated
    b.use CheckRunning
    b.use Vagrant::Action::Builtin::SSHRun
  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.



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/vagrant-lxc/action.rb', line 82

def self.action_start
  Vagrant::Action::Builder.new.tap do |b|
    b.use Vagrant::Action::Builtin::ConfigValidate
    b.use Vagrant::Action::Builtin::Call, IsRunning do |env, b2|
      # If the VM is running, then our work here is done, exit
      next if env[:result]
      # TODO: Check if has been saved / frozen and resume
      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.



96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/vagrant-lxc/action.rb', line 96

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