所以我想我应该尽可能开始使用Ansible Galaxy,而不是自己编写角色。我刚刚安装了我的第一个角色,它已安装到/etc/local/ansible/roles
(我在OSX上)。现在我想知道你如何在我真正需要的地方安装这个角色?我只是将角色复制到我需要的地方,还是有一种Ansible方式可以做到这一点?
答案 0 :(得分:51)
是的,您可以根据示例项目结构复制它们:
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
meta/
或者您可以使用ansible-galaxy
或-p ROLES_PATH
选项运行--roles-path=ROLES_PATH
,将其安装在/your/project/root
下
如果您愿意,也可以使用/etc/local/ansible
目录作为项目根目录。
希望它有所帮助。
答案 1 :(得分:37)
通常,我将所有共享角色都放在一个主文件夹中,该文件夹在我的所有项目中共享。这避免了手动复制/粘贴和更新同一角色的多个副本的繁琐程度。
我修改每个项目的SURVEY
以告诉user> (defn togethr [thing]
(into [:a] (if (sequential? thing) thing [thing])))
#'user/togethr
user> (togethr 1)
[:a 1]
user> (togethr :b)
[:a :b]
user> (togethr [:b :c])
[:a :b :c]
除了本地项目文件夹之外还要查找该主文件夹中的角色。
示例ansible.cfg
:
ansible
Ansible首先在本地项目中搜索角色,然后搜索ansible.cfg
。您可以通过用冒号分隔多个路径来指定。
默认情况下,[defaults]
roles_path = ~/Code/ansible_roles
会将角色安装到roles_path
中配置的ansible-galaxy install username.rolename
,这就是您需要做的所有事情。
有时我想将角色安装到特定项目而不是主文件夹中。例如,当两个角色具有需要相同角色的不同版本的角色依赖关系时,要避免版本冲突。在这种情况下,您可以使用roles_path
或ansible.cfg
选项:
-p ROLES_PATH
在Ansible 1.9中,您可以手动指定在项目的--roles-path=ROLES_PATH
中安装角色的位置。不幸的是,this path
param was removed in Ansible 2:
ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/
如果您想进一步自定义内容,add support for multiple ansible.cfg
files会有一个未解决的问题,可让您轻松设置requirements.yml
不同的特异性级别。 Ansible将在当前工作目录中阅读# from galaxy
- src: jeffwidman.elasticsearch
# from private github repo, installing to a relative path
- src: https://github.com/jeffwidman/private_ansible_role
path: vagrant/roles/
,roles_path
,在主目录中显示ANSIBLE_CONFIG
或ansible.cfg
,无论它首先找到。
答案 2 :(得分:21)
以下是我如何解决处理galaxy角色的问题,并适用于任何平台。
修改您的ansible.cfg
文件,该文件应该是您的源代码管理的一部分,并将其添加到其中:
roles_path = roles.galaxy:roles
创建一个名为roles.galaxy
的目录,从现在开始,当您执行ansible-galaxy install xxx.yyy
时,它将安装到roles.galaxy
。
您将继续将您的本地角色保留在roles
目录和roles.galaxy
中的社区角色中。它们都应该保存在你的git仓库中。
不要考虑从galaxy安装它们,除了增加几个额外的故障点之外,这将是一个很大的安全风险。
答案 3 :(得分:9)
我可能太迟回答这个问题了。但是你想要的只需一个命令就可以完成:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "backToFirstViewFromSecondView" {
let destinationController = segue.destination as! FirstViewController
destinationController.resultLabel.text = secondViewTextField.Text
}
}
会将letsencrypt角色安装到roles目录,您无需复制内容。
答案 4 :(得分:1)
我希望我的角色有一条全球化的道路。你可以这样做我把一个ansible.cfg放在〜/ .ansible.cfg。基于项目的项目始终优先。
cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles
答案 5 :(得分:0)
要将角色保存在资源库文件夹中(这可能是您想要的,对所有内容进行版本控制是基础架构代码之一),并假定这是您的目录布局:
ansible.cfg
打开上面显示的[defaults]
roles_path = roles.galaxy:roles
(或者如果尚未创建,请重新创建),并添加以下内容:
ansible-galaxy install SOMETHING
运行roles.galaxy
会将其内容保存在{{1}}文件夹中。