ruby Vagrantfile中的if ... then语句显示错误“语法错误,意外的”]“,应为”end“

vecaoik1  于 2022-12-22  发布在  Ruby
关注(0)|答案(1)|浏览(156)

我正在尝试在三个虚拟机上本地设置Hadoop群集。我已成功设置我的虚拟机。我还在主节点上安装了Hadoop。但是,每次运行vagrant provision时,它都会重新下载Hadoop,这很耗时。我想检查是否已安装Hadoop,如果已安装,则跳过下载Hadoop的代码。
下面是我的代码。/home/vagrant/hadoop是hadoop的位置。

# Download and extract Hadoop on master node (i.e node1)      
      if node.vm.hostname == "node1"  
        # Check if Hadoop is already installed so it wont install every time you run vagrant provision
        if [ ! -d "/home/vagrant/hadoop" ]; then
          node.vm.provision "shell", inline: <<-SHELL
            wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
            tar -xvzf hadoop-3.3.4.tar.gz
            mv hadoop-3.3.4 hadoop
          SHELL
        fi
      fi

这是我得到的错误。
unexpected end-of-input, expecting结束
我将fi更改为end,并得到以下错误。
syntax error, unexpected结束”,应为输入结束``

xdnvmnnf

xdnvmnnf1#

我认为你模糊了Ruby(流浪者)和shell(主机)之间的界限:

if node.vm.hostname == "node1"  
  # Check if Hadoop is already installed so it wont install every time you run vagrant provision
  node.vm.provision "shell", inline: <<-SHELL
    if [ ! -d "/home/vagrant/hadoop" ]; then
      wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
      tar -xvzf hadoop-3.3.4.tar.gz
      mv hadoop-3.3.4 hadoop
    fi
  SHELL
end

尽管Ruby的语法可能(至少表面上)类似于shell,但它是完全不同的。
请记住,运行在主机上的Ruby无法测试VM中可能存在或不存在的目录。这是您必须使用shell来完成的事情,因此它位于shell命令中。

相关问题