2015-09-25 98 views
2

我有一個本地git存儲庫,我試圖克隆到一個流浪機器上。我試圖用ansible的「混帳」模塊要做到這一點,我有以下任務,如何從本地git存儲庫克隆到使用可變的虛擬機

- name: Clone repository 
    git: repo=git://../.git dest=/home/vagrant/source accept_hostkey=True 

當我運行這個任務,我收到錯誤,

failed: [webserver] => {"cmd": "/usr/bin/git ls-remote git://../.git -h refs/heads/HEAD", "failed": true, "rc": 128} 
stderr: fatal: unable to connect to ..: 
..[0: 42.185.229.96]: errno=Connection timed out 

msg: fatal: unable to connect to ..: 
..[0: 42.185.229.96]: errno=Connection timed out 

FATAL: all hosts have already failed -- aborting 

它看起來像它的嘗試在我的虛擬機而不是我的本地機器上找到存儲庫?如何從我的本地回購克隆?

回答

2

git模塊完全在VM內部執行 - 您必須給它提供VM可訪問的路徑。要麼與你的主機做一個無用的NFS共享/同步文件夾,要麼通過http/ssh通過網絡將它展示給VM。請注意,使用Virtualbox(以及可能的其他提供者)流浪的非NFS共享文件夾只是來回複製愚蠢的副本,而不是真正的「共享」(即,根據您的回購有多大,如果不是NFS )。

1

git命令將從遠程計算機運行,在這種情況下是您的Vagrant VM,而不是本地計算機。

完成此操作的一種方法是通過SSH遠程端口轉發。您可以將來自遠程(Vagrant VM)端口的連接從本地機器轉發至主機+端口。

您的本地機器需要使git存儲庫可用。這可以通過sshd來完成,但我會使用相對比較晦澀的git-daemon,因爲它更容易設置。

在您的Ansible清單文件中,將以下選項添加到您的Vagrant VM主機。這將在連接期間將端口9418上的遠程計算機的請求轉發到端口9418(git-daemon)上的本地計算機。

# inventory 
webserver ansible_ssh_extra_args="-R 9418:localhost:9418" 

# *OR* for a group of hosts 
[webservers:vars] 
ansible_ssh_extra_args="-R 9418:localhost:9418" 

在這個例子中,我將承擔GIT_DIR在本地計算機上位於/home/you/repos/your-git-repo/.git。運行您Ansible劇本之前,在另一端開始下面的命令(如果你想看到的輸出增加--verbose選項):

git daemon \ 
    --listen=127.0.0.1 \ 
    --export-all \ 
    --base-path=/home/you/repos \ 
    /home/you/repos/your-git-repo/.git 

你的任務是這樣的:

- git: repo=git://localhost/your-git-repo dest=/home/vagrant/source 

現在當git連接到本地主機時(相對於你的Vagrant VM),請求被轉發到本地機器上運行的git守護進程。