如何使用ansible

时间:2015-09-25 15:28:03

标签: ansible

我有一个本地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

看起来它正试图在我的VM而不是本地机器上找到存储库?如何从我当地的仓库克隆?

2 个答案:

答案 0 :(得分:2)

git模块完全在VM内部执行 - 你必须给它一个VM可以访问的路径。要么与主机一起使用vagrant NFS shared / synced文件夹,要么通过http / ssh通过网络将其公开给VM。请注意,虚拟机中的非NFS共享文件夹(以及可能的其他提供商)只是来回执行哑本副本,而不是真正的“共享”(即,根据您的回购的大小,如果不是NFS,您可能会感到抱歉)。

答案 1 :(得分: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 playbook之前,在另一个终端中启动以下命令(如果要查看输出,请添加--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连接到localhost(相对于您的Vagrant VM)时,请求将转发到本地计算机上运行的git守护程序。