【问题标题】:How to keep vagrant configuration organized如何保持 vagrant 配置井井有条
【发布时间】:2016-10-23 07:46:27
【问题描述】:

我正在使用 ansible 配置 vagrant box。但是,我的 vagrant 主机不支持 ansible,所以我必须从 vagrant 框中对 localhost 执行 ansible。我正在使用 shell 配置程序,执行一个脚本,该脚本将安装 ansible 并针对同步文件夹中的 playbook 运行正确的 ansible 命令。

此解决方案有效,但感觉混乱且难以维护,因为文件之间的配置数据杂乱无章。正如你在下面看到的,剧本路径有重复,硬编码到 Vagrantfile 和配置脚本。正如我们所知,重复是罪恶之源。相反,我想将所有配置字符串保存在 Vagrantfile 或外部文件中。在我的情况下这可能吗?能够用命令行参数覆盖这些值也很好。

这是 vagrant 文件

VAGRANT_API_VERSION = 2
BOX_IMAGE = "ubuntu/trusty64"
PROVISIONING_SRC = "./provisioning"
PROVISIONING_DEST = "/etc/provisioning/vagrant"

Vagrant.configure(VAGRANT_API_VERSION) do |config|

  config.vm.box = BOX_IMAGE
  config.vm.network "private_network", ip: "192.168.22.22"
  config.vm.network "forwarded_port", guest: 8080, host: 8080
  config.vm.network "forwarded_port", guest: 8081, host: 8081
  config.vm.network "forwarded_port", guest: 2222, host: 2223
  config.vm.network "forwarded_port", guest: 5000, host: 5000
  config.vm.network "forwarded_port", guest: 50000, host: 50000
  config.vm.provision :shell, path: "provisioning.sh"

  config.vm.synced_folder "./provisioning", "/etc/provisioning/vagrant"

end

这是配置脚本

apt-get install -y python-pip
apt-get install -y git-core

if [ -z $PLAYBOOK_PATH ]; then
  echo "PLAYBOOK_PATH not set, using default"
  PLAYBOOK_PATH=/etc/provisioning/vagrant/playbook.yml
fi

if [ -n $PLAYBOOK_PATH ]; then
  echo "PLAYBOOK_PATH set at $PLAYBOOK_PATH"

  if [ -f $PLAYBOOK_PATH ]; then
    echo "PLAYBOOK FOUND, insalling ansible and starting provisioning"
    pip install ansible
    pip install markupsafe

    if ( ansible-playbook $PLAYBOOK_PATH ); then
      echo "provisioning OK"
    else
      echo "prvosioning failed"
    fi

  else
    echo "PLAYBOOK not found"
  fi

else
  echo "PLAYBOOK_PATH not set"
fi

最后是配置文件夹中的剧本

- name: Provision local docker host
  hosts: localhost
  become : yes
  roles:
   - docker.ubuntu
  tasks:
   - name: Add vagrant to docker group
     become: yes
     user: name=vagrant groups=docker append=yes

【问题讨论】:

    标签: shell configuration installation vagrant ansible


    【解决方案1】:

    你不一定需要做这一切。

    Vagrant 支持running ansible on the guest VM aka ansible local

    Vagrant Ansible Local Provisioner 允许您通过直接在客户机上执行 ansible-playbook,使用 Ansible playbook 来配置客户机。

    你可以有一个 Vagrantfile 像

    VAGRANT_API_VERSION = 2
    BOX_IMAGE = "ubuntu/trusty64"
    PROVISIONING_SRC = "./provisioning"
    PROVISIONING_DEST = "/etc/provisioning/vagrant"
    
    Vagrant.configure(VAGRANT_API_VERSION) do |config|
    
      config.vm.box = BOX_IMAGE
      config.vm.network "private_network", ip: "192.168.22.22"
      config.vm.network "forwarded_port", guest: 8080, host: 8080
      config.vm.network "forwarded_port", guest: 8081, host: 8081
      config.vm.network "forwarded_port", guest: 2222, host: 2223
      config.vm.network "forwarded_port", guest: 5000, host: 5000
      config.vm.network "forwarded_port", guest: 50000, host: 50000
    
      config.vm.provision "ansible_local" do |ansible|
        ansible.playbook = "provisioning/playbook.yml"
      end
    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多