Ana bilgisayarın SSH anahtarlarını kullanarak Vagrant VM içindeki özel depoları klonlamak nasıl yapılır?


11

PuppetLabs'ı vcsrepogenel git depolarını klonlamak için kullanabiliyorum , ancak ana bilgisayarın SSH anahtarlarını kullanarak özel depoları da klonlamak istiyorum.

Yapılandırma bunu başarmak için neye Vagrantfileve / veya neye benzeyecektir manifests/default.pp?

Yanıtlar:


10

Kukla kısmına yardım edemem, ancak SSH Agent'ı ayarlayarak iletebilirsiniz:

Vagrant.configure("2") do |config|
  config.ssh.forward_agent = true
  # ...
end

Bu şekilde SSH bağlantıları (git tarafından da yapılır) ana bilgisayardan özel anahtarlarınızı kullanmaya çalışır.


Çoğu durumda bunun Windows'ta çalışmamasına neden olan bir hata var.
Chase Sandmann

@ChaseSandmann hata hakkında daha fazla bilgi verebilir misiniz? Github sorunuyla ilgili bir bağlantınız var mı? Bunu buldum ama sanmıyorum çünkü VirtualBox 5 ile ilgili görünüyor: github.com/mitchellh/vagrant/issues/6225
mastazi

5

Makinemde çalışıyor!

Vagrantfile:

VAGRANTFILE_API_VERSION = '2'

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = 'precise64'
  config.vm.box_url = 'http://files.vagrantup.com/precise64.box'

  #
  # Use host authenticaton for git and maven.
  #
  # Ensure host private key is registered with host SSH agent:
  #
  # ssh-add -L
  # ssh-add ~/.ssh/id_rsa
  # ssh-add -L
  #

  config.ssh.private_key_path = ['~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa']
  config.ssh.forward_agent = true

  config.vm.synced_folder "~/.m2", "/home/vagrant/.m2"

  config.vm.provision :shell, path: 'upgrade-puppet.sh'

  # Install puppet modules
  config.vm.provision :shell, path: 'bootstrap.rb', args: %w(
    puppetlabs-stdlib
    puppetlabs/apt
    puppetlabs/vcsrepo
  )

  config.vm.provision :puppet do |puppet|
    puppet.options = ENV['PUPPET_OPTIONS']
  end
end

upgrade-puppet.sh:

#!/bin/bash

apt-get install --yes lsb-release > /dev/null
DISTRIB_CODENAME=$(lsb_release --codename --short)
DEB="puppetlabs-release-${DISTRIB_CODENAME}.deb"
DEB_PROVIDES="/etc/apt/sources.list.d/puppetlabs.list" # Assume that this file's existence means we have the Puppet Labs repo added

if [ ! -e $DEB_PROVIDES ]
then
    # Print statement useful for debugging, but automated runs of this will interpret any output as an error
    # print "Could not find $DEB_PROVIDES - fetching and installing $DEB"
    wget -q http://apt.puppetlabs.com/$DEB
    sudo dpkg -i $DEB
fi
sudo apt-get update > /dev/null
sudo apt-get install --yes puppet > /dev/null

mkdir -p /etc/puppet
touch /etc/puppet/hiera.yaml

bootstrap.sh:

#!/usr/bin/env ruby

modules_dir = '/etc/puppet/modules'

puts `mkdir -p #{modules_dir}` unless File::exists? modules_dir

mods = ARGV

installed = `puppet module list`.split "\n"

mods.each do |mod|
  puts `puppet module install #{mod}` unless installed.any? { |i| i.include?(mod.sub('/','-')) }
end

manifestolar / default.pp:

exec { 'ssh know github':
  command => 'ssh -Tv git@github.com -o StrictHostKeyChecking=no; echo Success',
  path    => '/bin:/usr/bin',
  user    => 'vagrant'
}

vcsrepo { '/home/vagrant/a-private-repo':
  ensure   => latest,
  provider => git,
  source   => 'git@github.com:mcandre/a-private-repo.git',
  user     => 'vagrant',
  owner    => 'vagrant',
  group    => 'vagrant',
  require  => Exec['ssh know github']
}

bootstrap.shbootstrap.rbbunun çalışması için olmalı .
Monkpit

2

Kukla kullandığınızı biliyorum, ama kalktım ve bu bash script ( provisioners/shell/application.setup.sh) kullanarak çalışıyor :

#!/bin/bash

local_user=vagrant

if [ ! -n "$(grep "^bitbucket.org " /home/$local_user/.ssh/known_hosts)" ]; then 
    ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null;
fi

if [[ ! -d "/home/$local_user/app" ]]; then
    git clone git@bitbucket.org:czerasz/some-app.git /home/$local_user/app

    chown -R $local_user:$local_user /home/$local_user/app

    su - $local_user -c "source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv some-env && workon some-env && pip install -r /home/$local_user/app/requirements.txt"
fi

Bir kolayca bir kukla manifest dönüştürmek olabilir ...

Bununla birlikte Vagrantfile

config.vm.define "web1", primary: true do |web1_config|
    web1_config.ssh.forward_agent = true

    # Create a private network, which allows host-only access to the machine
    web1_config.vm.network "private_network", ip: "192.168.11.10"
    web1_config.vm.hostname = "web1.#{domain}"

    web1_config.vm.provision "shell", path: "provisioners/shell/python.setup.sh"
    web1_config.vm.provision "shell", path: "provisioners/shell/application.setup.sh"
end

Benim için kilit nokta, yürüttüğümde:

su - $local_user -c "ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null;"
su - $local_user -c "git clone git@bitbucket.org:czerasz/some-app.git /home/$local_user/app"

İşe yaramadı. Anahtarlar kullanılarak geçirilmemiş gibi su. Bu yüzden repoyu kök olarak klonladım ve daha sonra sahipliğini değiştirdim.

Bu yazı çok yardımcı oldu.


Dostum ..... Sizinkine kadar bir sürü oldukça yararsız gönderi buldum. Alkış !!!
Eric Hodonsky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.