2016-06-23 55 views
3

我有一个在剧本中没有角色的git项目,我想使用其中的一个角色。ansible galaxy - 从回购安装角色

回购的克隆工作,但它在存档阶段失败:

executing: git clone https://[email protected]/my-project/search-mysql search-mysql executing: git archive --prefix=search-mysql/ --output=/tmp/tmp3f6ySq.tar search 
command git archive --prefix=search-mysql/ --output=/tmp/tmp3f6ySq.tar search failed 

使用requirements.yml文件,

ansible-galaxy install --role-file=requirements.yml --roles-path=roles --force 

任何想法,为什么存档失败? 我只能下载角色而不是整个项目(search-mysql)?

感谢,

+0

你可以显示'requirements.yml'的相关部分吗?我从来没有见过一个功能如何使用回购的单个子目录作为星系角色的来源。好奇你是如何尝试这一点的。 – udondan

+0

当然,但这只是在测试,我仍然无法得到它的工作: - src:https://[email protected]/my-project/search-mysql 版本:主 名称:search- mysql 这将克隆我的所有项目,我需要克隆只有角色文件夹或从我的ansible中调用此项目中的特定角色。 – A1001

回答

1

除非有无证功能(这是不是要发生的事情稀有)所需的一个星系兼容的角色专用的混帐回购协议。如果一个角色是不同项目使用的组件,就像您的情况一样,无论如何,将它存储在单独的项目中是有意义的。你不能将角色移出并在两个项目中引用它吗?

哈克解决方法可能是这样的:

在你要求的文件指定你的角色回购将被保存到一个位置:

- src: [email protected]/my-project/search-mysql 
    version: master 
    name: search-mysql 
    path: ./role_collection 

现在ansible星系将节省回购在./role_collection/search-mysql

这只是为了不污染原始roles目录与一个实际上拥有角色集合的文件夹。

在你的剧本,你也可以指定每个角色的完整路径:

- hosts: ... 
    roles: 
    - ./role_collection/search-mysql/path/to/your/role/inside/the/repo 
+0

这基本上是我正在寻找,但尝试这仍然生成在存档步骤相同的错误: 命令git档案 - 前缀=搜索mysql的 - 输出=/tmp/tmpnnxPoK.tar搜索失败 – A1001

+0

哦,我认为这对你有用。尝试添加一个'scm:git'到requirements.yml条目 – udondan

+0

仍然没有.... 我认为这是因为我不是在主档案失败的工作,我需要一个选项结帐到工作分支( - b)在克隆之后,当ansible会运行归档时 - git archive --prefix = search/--output =/tmp/tmpkMNgsG.tar搜索 - 其中搜索是新分支,它希望能够工作。 – A1001

0

这来自ansible星系支持: “我只是检查,这是每回购情况一个角色。如果你想要的。从存储库中获取各个角色,那么您需要将它们分开。“