• vagrant 入门第七篇


    Vagrant Shell 配置器的使用

    Vagrant Shell 配置器的使用

    摘要: 本文翻译自 Vagrant 官方文档 Shell Provisioner 部分,主要介绍了 Vagrant Shell 配置器的使用,如何使用内联脚本代码和外部脚本文件来配置虚拟机。

    Provisioner name: “shell”

    Vagrant Shell 配置器允许你向虚拟机上传脚本并执行。

    对于想要快速启动和运行 Vagrant 的新手来说,Shell 配置器非常理想,并为不熟悉 ChefPuppet 等配置管理系统的用户提供了选择。

    对于类 POSIX 机器,shell 配置器使用 SSH 执行脚本。对于 Windows 机器,使用 WinRM 来执行脚本,shell 配置器通过 WinRM 执行 PowerShell 和 Batch (译者注:批处理) 脚本。

    选项

    shell 配置器有很多选项,其中 inline 或者 path 选项是必须的:

    • inline (string) - 指定在远程机器执行的 shell 内联命令。更多信息见下面 inline scripts 章节。
    • path (string) - 要上传并执行的 shell 脚本路径。该脚本可以是一个相对于 Vagrantfile 工程的文件或者是一个远程脚本(比如 gist)。

    剩下的这些选项是可选的:

    • args (string or array) - 当以单一字符串执行脚本时,传递给脚本的参数。这些参数必须写得好像它们直接在命令行上键入一样,所以在需要时一定要避免字符、引号等。你也可以使用数组来传递参数。在这种情况下,Vagrant 将会为你处理引用。
    • env (string) - 传递给脚本作为环境变量的键值对。Vagrant 会处理环境变量值的引用,但是键保持不变。
    • binary (boolean) - Vagrant 会自动用 Unix 换行符来代替 Windows 换行符。如果设置为 false,不会替换。默认值是 “false”。如果 shell 配置器通过 WinRM 来交互,那么默认值是 “true”。
    • privileged (boolean) - 指定是否以超级用户执行脚本。默认是 “true”。Windows guest 虚拟机使用计划任务作为真正的管理员运行,而不受WinRM限
    • upload_path (string) - 上传脚本的远程路径。脚本将会通过 SCP 上传到 SSH 用户,因此该路径对于 SSH 用户必须是可写的。默认路径是 /tmp/vagrant-shell。在 Windows 下,这个默认路径是 C: mpvagrant-shell
    • keep_color (boolean) - Vagrant 根据终端输出是否是 stdout 或 stderr 自动地以绿色或者红色输出。如果设置为 true,Vagrant 不会输出颜色,而使用脚本的原生色彩输出。
    • name (string) - 该值将显示在终端输出中,以便在许多 shell 配置器存在时让用户识别更容易。
    • powershell_args (string) - 传递给 PowerShell 的额外参数,如果你在 Windows 使用 PowerShell。
    • powershell_elevated_interactive (boolean) - 在 Windows 交互式运行脚本。默认是 “false”。也必须享有特权。一定要启用 Windows 的自动登录,因为用户必须登录才能使用交互模式。
    • md5 (string) - 用于验证远程下载的 shell 文件的 MD5 值。
    • sha1 (string) - 用于验证远程下载的 shell 文件的 SHA1 值。
    • sensitive (boolean) - 将 env 选项中的 Hash 值标记为敏感数据,并将其从输出中隐藏起来。默认值是 “false”。

    内联脚本

    也许最简单的入门方式是使用内联脚本。内联脚本是直接在 Vagrantfile 文件中给定的脚本代码。例如:

    Vagrant.configure("2") do |config|
      config.vm.provision "shell",
        inline: "echo Hello, World"
    end1234
    

    当配置器运行时,会在虚拟机中运行 echo Hello, World

    结合少量 Ruby 代码,很容易将 shell 脚本直接嵌入到 Vagrantfile 文件。举例如下:

    $script = <<-SCRIPT
    echo I am provisioning...
    date > /etc/vagrant_provisioned_at
    SCRIPT
    
    Vagrant.configure("2") do |config|
      config.vm.provision "shell", inline: $script
    end12345678
    

    我知道如果你对 Ruby 不熟悉,那么上面的配置可能会看起来非常高级,但是不用害怕,它做的很简单:将 shell 脚本被赋 $shell 变量。这个全局变量包含一个字符串,然后作为内联脚本传递给 Vagrant 配置文件。

    当然,如果在 Vagrantfile 中还有除了基本变量赋值之外的其他 Ruby 代码使你感到不舒服,那么您可以使用一个实际的脚本文件,在下一节中将对此进行说明。

    对于 Windows 虚拟机,内联脚本必须是是 PowerShell。Batch(译者注:批处理) 脚本不能作为内联脚本。

    外部脚本

    shell 配置器还可以指定本地主机上的脚本的路径。Vagrant 会将该脚本上传到虚拟机并执行。例如:

    Vagrant.configure("2") do |config|
      config.vm.provision "shell", path: "script.sh"
    end123
    

    上面的路径是相对于中 Vagrantfile 的路径。也可以使用绝对路径,以及 ~ (家目录)和 .. 等快捷方式。

    如果你使用远程脚本作为配置器,你也可以将远程脚本的 URL 作为 path 的参数:

    Vagrant.configure("2") do |config|
      config.vm.provision "shell", path: "https://example.com/provisioner.sh"
    end123
    

    如果你在 Windows 上运行 Batch(译者注:批处理) 或者 PowerShell 脚本,请确保外部路径具有适当的扩展名(”.bat” 或者 “.ps1”),由于 Windows 使用扩展名来决定所执行文件的类型。如果没有扩展名,那么脚本可能无法使用。

    如果运行一个已经在虚拟机存在的脚本文件,你可以使用内联脚本来调用该远程虚拟机脚本:

    Vagrant.configure("2") do |config|
      config.vm.provision "shell",
        inline: "/bin/sh /path/to/the/script/already/on/the/guest.sh"
    end1234
    

    脚本参数

    您可以像任何普通的shell脚本一样参数化脚本。这些参数可以指定给 shell 配置器。应该将它们指定为字符串,因为它们将作为命令行的输入,因此确保正确地转义任何字符:

    Vagrant.configure("2") do |config|
      config.vm.provision "shell" do |s|
        s.inline = "echo $1"
        s.args   = "'hello, world!'"
      end
    end123456
    

    如果您不想担心引用,则还可以将参数指定为数组:

    Vagrant.configure("2") do |config|
      config.vm.provision "shell" do |s|
        s.inline = "echo $1"
        s.args   = ["hello, world!"]
      end
    end
    
  • 相关阅读:
    【Java】国内maven私服
    【密码学】常见证书格式及相互转换
    【密码学】数字证书原理
    【Java】Java与数字证书
    【Java】在eclipse中使用maven进行项目构建 入门篇
    【Java】在eclipse中使用gradle进行项目构建 入门篇
    Practice encryptedblobstore
    47、[源码]-Spring容器创建-初始化MessageSource
    46、[源码]-Spring容器创建-注册BeanPostProcessors
    45、[源码]-Spring容器创建-执行BeanFactoryPostProcessor
  • 原文地址:https://www.cnblogs.com/liuwei-xd/p/11020334.html
Copyright © 2020-2023  润新知