Vagrantfile ruby​​语法解释

时间:2016-10-08 07:13:23

标签: ruby vagrant

我对用于配置Vagrant的ruby语法感到困惑。特别是这种结构。这是一项任务,方法调用还是其他什么?是纯红宝石还是流浪汉特有的方言?

config.vm.network "forwarded_port", guest: 3000, host: 3000

这一个。 “ansible”是一个赋值或参数,并且| ansible |来自?

config.vm.provision "ansible" do |ansible|
  ansible.playbook = "provisioners/docker.yml"
end

我可以在哪里找到有关这些特定表达的更多信息?

2 个答案:

答案 0 :(得分:0)

那些是DSLs,Ruby是编写DSL的非常好的语言,看看另一个question

虽然这些是DSL,但你可以在这些块之外抛出vanilla Ruby代码,并且可能在内部以及评估之前。

答案 1 :(得分:0)

Vagrantfile用标准的Ruby语法编写。

这是一个Vagrantfile示例

Vagrant.configure("2") do |config|
  # this is an evaluation statement
  # .box is an string attribute
  config.vm.box = "debian/stretch64"

  # this is a method call
  # .synced_folder is a method that takes two positional arguments ('synced_folder', '/vagrant'), 
  # followed by some keyword arguments (disabled: true)
  config.vm.synced_folder 'synced_folder', '/vagrant', disabled: true

  # this is a method call, followed by a "do ... end" block
  # .provider is a method that takes one positional argument (:libvirt)
  config.vm.provider :libvirt do |node|
    # these are two evaluation statements
    node.cpus = 4
    node.memory = 4096
  end
end

根据官方文件, 您可以在“ config.vm.box (string)”中看到变量“字符串”, 但不遵循方法config-vm-providerconfig-vm-synced_folder

即使阅读了官方文档,我也对Vagrantfile语法感到困惑。 我认为这是因为与我以前使用的其他语言相比,Ruby对我来说看起来非常不同。