VAGRANTFILE

本文发布时间: 2019-Mar-22
VAGRANTFILE概述vagrantfile的基本功能就是描述工程需要的机器,以及如何配置和提供这些机器。vagrantfile被称为vagrantfile也仅仅是因为配置文件的文件名就是vagrantfile。vagrant对于每个项目都有一个vagrantfile文件,vagrantfile还被用来进行版本控制。这就可以让这个项目的其他开发人员,来导出代码,运行vagrant up命令来启动。vagrantfile适用于vagrant支持的每个平台。vagrantfile的语法是Ruby,但是并不是说需要有Ruby的相关知识,才能修改Vagrantfile。因为vagrantfile的文件内容仅仅是赋值操作。实际上,即使没有Ruby的相关知识,也可以非常成功的使用vagrant.查找路径当运行vagrant命令时候,vagrant就会自动从当前目录开始,寻找vagrantfile所在的路径。如果当前你运行vagrant的目录是/home/mitchellh/projects/foo,它就会从如下的目录中寻找vagrantfile,直到找到它。/home/mitchellh/projects/foo/Vagrantfile/home/mitchellh/projects/Vagrantfile/home/mitchellh/Vagrantfile/home/Vagrantfile/Vagrantfile这个功能,可以让你在任何目录下都可以运行vagrant命令。当然也可以通过设置vagrant_CWD环境变量来设置vagrant开始查找的目录。加载顺序和合并vagrant导入vagrantfile文件的一个重要的概念是,vagrant确实导入了一系列的vagrantfile,合并了他们设置。不同层次设置的参数,就会覆盖之前的设置。vagrantfile是按照如下的顺序导入的。如果当前vagrantfile没有找到文件,就会继续运行下一步。1、vagrantfile打包在需要使用的box里面。2、vagrantfle在你的vagrant目录下,这个为系统用户可以指定默认设置3、指定项目的vagrantfile,对于不同的项目vagrantfile是不同的。4、Multi-machine5、Provider-secific对于每个层次来说,设置的参数都会和之前层次的参数合并。对于大多数设置来说,最新的设置,覆盖老的设置。然而,对于网络的设置会应用到每个.默认情况下,你应该假定那些设置会覆盖每个应用。如果有不同的地方,应该在相关的文档里面说明。对于每个vagrantfile,你可以指定多个vagrant.configure区域,所有的vagrantfile最终都会被合并到一个vagrantfile里面。配置版本vagrant1.1以后的配置版本的机制,主要用来向后兼容vagrant1.0.X的版本。如果运行vagrantinit命令,vagrantfile将会被创建成如下形式。Vagrant.configure("2") do |config| # ...end在第一行的“2”代表配置的版本,“config”被用来配置,这个对于不同的版本来说是不一样的。当前只是支持两个版本“1”和“2”。“1”代表版本vagrant 1.0.x。"2"代表从1.1+到2.0.x。当导入vagrantfile的时候,vagrant对于不同的版本应用不同的配置或者合并他们。对于vagrant的通常用户来说,在一个配置会话里面,只有一个版本可以使用。可以使用config.vm.provider来版本1的配置会话里面。就像,config.vm.forward-port不会在版本2的配置会话里面。如果需要可以在一个vagrantfile里面混合多个配置信息。这个对你寻找一个有用的配置片段。Vagrant.configure("1") do |config| # v1 configs...endVagrant.configure("2") do |config| # v2 configs...end最小的vagrant版本信息在vagrantfile中还可以指定vagrant的版本集合。让使用vagrant的人,必须采用相应的版本。这个对于那些采用太旧或者太新版本引发的兼容性问题非常有用。vagrant版本应当放在vagrantfile的第一行,用vagrant.require_versionVagrant.require_version ">= 1.3.5"这样的话只有vagrant的版本大于1.3.5的时候,这个vagrantfile才会导入。同样还可以设置最大的版本号。Vagrant.require_version ">= 1.3.5", "< 1.4.0"提示和技巧vagrantfile有一个非常灵活的配置格式。因为你是用Ruby,可以用来做很多事情。同样相反的一面,这样也会有很多犯错误的地方。当应用这页的提示和技巧的时候,请确保准确。循环定义VM如果你想应用稍微不同的配置到多台机器,你可以用一个循环来完成。例如,如果你想创建三台机器(1..3).each do |i| config.vm.define "node-#{i}" do |node| node.vm.provision "shell", inline: "echo hello from node #{i}" endend# THIS DOES NOT WORK!for i in 1..3 do config.vm.define "node-#{i}" do |node| node.vm.provision "shell", inline: "echo hello from node #{i}" endend在Ruby的for i in ..语法结构实际上改变了i的值。而不是仅仅一个复制。所以当运行这个命令,每个节点将会采用同一个文本名字。这是一个很容易犯的错误,所以最好的办法是在这提示一下。在主机的SSH中覆盖通常,主机的环境变量会传输到客户机。这样的话如果客户机不支持这些变量将会引发错误。一个好的解决方法是在vagrantfile中覆盖。ENV["LC_ALL"] = "en_US.UTF-8"Vagrant.configure("2") do |config| # ...end这种变化只是在vagrantfile中。机器设置配置空间名字:config.vmconfig.vm主要用来改变vagrant管理机器的配置可用设置config.vm.boot_timeout-vagrant等待机器的启动和连接时间,单位是秒。默认是300秒config.vm.box--这里配置机器启动的box的名字。这个名字应该是被导入的box的名字或者是简单的名字在HashiCorp中,当然这个参数需要vagrant1.5以上的版本。config.vm.box_check_update--如果这个设置为true那么vagrant将会检查每个box的更新,当运行vagrantupdate 的时候。如果找到了一个更新,vagrant将会告诉用户。默认情况下这个参数是true.这个命令仅仅检查那些支持更新的boxconfig.vm.box_download_checksum--这个校验和是通过config.vm.box_url来指定的。如果没有指定,就不会进行校验和的比对。如果设置了,那么就会同下载的box的校验和进行比较。如果不匹配的话就会报错。校验和只有当需要下载box的时候,才会采用。如果这个数值设置了,那么config.vm.box_download_checksum_type必须指定。config.vm.box_download_checksum_type-指定config.vm.box_download_checksum的校验类型,支持的值包括"md5","sha1","sha256"config.vm.box._download_client_cert-指定下载box的证书路径。默认情况下,下载box是不需要证书的。config.vm.box_download_ca_path-指定下载box的ca证书路径。默认情况会采用Mozilla证书绑定config.vm.box_download_insecure-如果设置为true,那么从服务器的SSL证书将不会校验。默认情况下如果URL是HTTPS协议,那么SSL证书将会被检查。config.vm.box_download_location_trusted--如果设置为true,那么所有的http重定向将会被允许。也就是说对于给初始的URL证书,将会被用来所有重定向的连接。默认情况下重定向的连接是不被信任的,证书只是给初始的HTTP连接。config.vm.box_url--可以配置box的URL。如果config.vm.box是一个box在HashiCorp中的缩写。这个值就不需要指定。相反,这个应当指定到没有导入的box中的合适的地方。这也可以是个URL的数组,那样的话对于每个URL就会逐个试一下。注意,所有客户证书,不安全的下载设置等等都会被用到这个列表的所有URL。同样URL也可以用file://格式保存在文件中。例如:file:///tmp/test.boxconfig.vm.box_version--指定采用的box的版本。默认的是“>=0”,当然也可以用逗号,分割例如">=1.0,<1.5".当指定限制的时候,vagrant将会采用最新的满足条件的vagrantconfig.vm.communicator--指定同客户box进行交互的类型。默认这个是'ssh',当然对于windows来说也可改为winrmconfig.vm.gracefule_halt_timeout--当调用vagranthalt将机器停止的时候,vagrant将等待的秒数。默认是60秒。config.vm.guest--运行客户机的操作系统。默认的是Linux操作系统。vagrant将会自动检测合适的发行版本。vagrant需要知道这个信息,以方便进行挂载文件夹、配置网络等相关操作。config.vm.hostname--机器应该拥有的主机名。默认是nil。如果是nil,vagrant将不会管理主机名字。如果设置成字符串,那么在启动的时候将会设置。config.vm.network--配置机器的网络,具体请看网络配置config.vm.post_up_message--当运行vagrant up的时候,显示的信息。这个信息是用来显示给用户的,当包含命令的时候很有用,比如说包含获取不同开发环境部分的命令。config.vm.provider-这个对于在provider中设置的值进行修改是很有用的。如果你配置的provider不存在或者当运行vagrant up的时候没有安装,vagrant将会忽略配置信息。这个就使即使没有安装同样名字的provider用户,也可以共享使用。config.vm.provision--配置机器的provisioner。所以当机器创建的时候软件就会自动安装和配置。config.vm.synced_folder--配置机器上的同步文件夹。这样主机上的文件夹将会和客户机相互同步。请参照同步部分,了解具体的配置config.vm.usable_port_range--vagrant用来处理端口冲突的一些端口SSH设置配置命名空间:config.ssh这个设置主要是用来管理vagrant如何通过ssh连接你的机器。大多数的Vagrant的默认设置是正常的,但是如果需要的话,可以微调。可用设置config.ssh.username--设置vagrant默认ssh连接的用户名。提供者会覆盖这个默认的用户名如果发现一个更合适的用户。默认是‘vagrant’,也是大多数box采用的。config.ssh.password--这个主要是用来设置ssh连接时用户的密码。vagrant建议采用密钥的认证,而不是密码。如果采用密码认证,vagrant会自动插入一对密钥如果insert_key是true的话。config.ssh.port--ssh连接的端口,默认是22config.ssh.guest_port--ssh在客户机运行的端口。这个被用来检测SSH转发端口。例如,如果这个被设置为22,那么vagrant就会检测转发到客户机22的端口,在主机是4567端口.如果没有别的设置的话,就会用4567端口同客户端口交互。config.ssh.private_key_path-用来进行SSH连接客户机私钥所在路径。默认情况下,这是不安全私钥,也主要被用来进行公共box。如果你用一个定制的box用一个定制的ssh,这个应该指向私钥。当然这个也可以设置为一个数字,通过指定多个私钥。这个是很有用的。比如,如果你用默认的私钥来引导机器。可以用更加安全的密钥。config.ssh.keys_only--只能用vagrant提供的ssh私钥,默认设置是trueconfig.ssh.paranoid--强制主机检查,默认值是trueconfig.ssh.forward_agent--如果是true,客户机转发ssh连接是允许的,默认是falseconfig.ssh.forward_x11--如果是true,X11转发SSH连接是允许的。默认是falseconfig.ssh.insert_key--如果是true,vagrant会自动插入密钥对来进行SSH连接,如果发现vagrant的默认不安全的密钥的话。默认是true.这个只有当你采用默认的密钥或者是不用私钥进行验证的时候有用。如果你不担心安全性的话,可以设置为false.config.ssh.proxy_command--在标准输入窗口,从命令行中的数据发到ssh。这个在用代理进行ssh连接的时候使用。%h代表主机,%p代表端口。config.ssh.pty--如果是真,pty用来给提供者。默认是false.这个功能除非特殊需要,不然不要开启。config.ssh.shell--当运行ssh命令的时候,所采用的壳。默认设置是bash -l.这个和运行vagrant ssh中的壳是不一样的。这个只影响在vagrant中执行命令的壳。config.ssh.sudo_command--这个当运行命令时候带着sudo。这个默认是sudo -E-H %c。%c是运行的命令。WINRM设置配置命名空间:config.winrm这个设置主要用来配置Vagrant如何通过WinRM连接Windows客户机。可用设置config.winrm.username --这个主要用来设置登录WINRM服务器的默认用户名。vagrant会覆盖这个名字,如果发现一个更合适的名字。默认这个名字是vagrant。config.winrm.password--这个主要用来登录winrm服务器的密码,默认的密码是vagrant。config.winrm.host--用来连接WinRM的主机名或者IP地址。默认这个是空的,通常提供者提供。config.winrm.port--用来连接WinRM的端口号,默认是5985config.winrm.guest_port--WinRM用来运行时候客户机的端口。这个主要用来进行WinRM转发端口。例如,如果这个设置为5985,vagrant检测到从4567端口进行转发到5985。那么会用4567端口转发到客户机端口。config.winrm.transport--Winrm用来进行交互的方式。有效的设置包括:negotiate,ssl,plaintext.,默认是negotiateconfig.winrm.basic_auto_only-是否采用基本的验证。默认是false.如果设置为true,你应当设置transport为plaintext。同时,windows也应当进行相应的设置。config.winrm.execution_time_limit --Winrm任务可以运行的最长时间。默认是2个小时。vagrant设置配置命名空间:config.vagrant这个配置主要用来修改vagrant自己的配置可用设置config.vagrant.host--这个主要用来设置vagrant主机运行的类型。默认是detect,这样的话vagrant会自动检测主机。vagrant需要知道这个信息,这样好进行相应的配置。比如采用NFS的文件模式。如果自动检测失败,需要手动设置。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表