2014-12-29 19 views
13

tl;dr = Wie empfehlen OS X-Benutzer, diesen Berechtigungsfehler zu umgehen?anisible-galaxy-Rolle schlägt fehl mit "habe keine Berechtigung zum Ändern von/etc/ansible/roles /"

Ich bin auf OS X 10.10.1 und ich vor kurzem installiert ansible die folgenden Programme ausgeführt wird:

sudo pip install ansible --quiet 
sudo pip install ansible --upgrade 

Ich möchte mit einer Galaxie Rolle beginnen homebrew zu installieren und ging dieses mit dem laufen folgende Fehlermeldung:

$ ansible-galaxy install geerlingguy.homebrew 
- downloading role 'homebrew', owned by geerlingguy 
- downloading role from https://github.com/geerlingguy/ansible-role-homebrew/archive/1.0.1.tar.gz 
- extracting geerlingguy.homebrew to /etc/ansible/roles/geerlingguy.homebrew 
- error: you do not have permission to modify files in /etc/ansible/roles/geerlingguy.homebrew 
- geerlingguy.homebrew was NOT installed successfully. 
- you can use --ignore-errors to skip failed roles. 

Während ich sehe /etc den Benutzer root gehört, sehe ich keine Hinweise in der Dokumentation sagen soll ich chmod nichts.

Zum Vergleich:

$ ansible --version 
ansible 1.8.2 
    configured module search path = None 

Ist das erwartet oder ist meine Installation irgendwie falsch?

Antwort

16

Der Standardspeicherort für Rollen ist /etc/ansible/roles. Sie müssen --roles-path angeben, wenn Sie ansible-galaxy verwenden. Hier ist, was ansible-galaxy install --help sagt:

-p ROLES_PATH, --roles-path=ROLES_PATH 
    The path to the directory containing your roles. The 
    default is the roles_path configured in your 
    ansible.cfg file (/etc/ansible/roles if not 
    configured) 

Sie auch roles_path in ansible.cfg festlegen können; see the documentation for details.

+0

Vielen Dank für eine Antwort! Ich kenne den Standardpfad und verstehe, dass ich ihn umleiten kann. Meine Frage könnte klarer formuliert werden als * Wie wird dieser Fehler normalerweise von denen auf OS X behoben? * Ich stelle mir vor, dass das Definieren von '--Rolen-Pfad' auf jeder Galaxie oder jedem Spielbuchanruf ärgerlich wäre. Es muss einen klügeren Weg geben. Irgendwelche Empfehlungen? – mbb

+1

Ich habe einen benutzerdefinierten 'roles_path' in meiner Datei'/etc/ansible/ansible.cfg', der momentan auf einen Speicherort in meinem Home-Ordner gesetzt ist (zB 'roles_path = ~/dev/ansible/roles'. (Siehe letzte Zeile) Wenn Sie den 'roles_path' global angeben, müssen Sie ihn nie in der Befehlszeile angeben. – geerlingguy

+0

Ihre zweite Frage wird mit' ansible.cfg' beantwortet; folgen Sie dem Link, um den richtigen Pfad festzulegen. – tedder42

2

Nachdem ich gesehen habe, dass Sie "sudo" verwendet haben, um Ansible zu installieren, nehme ich an, dass es in Ordnung sein sollte, "sudo" für die Installation von ansible-galaxy weiter zu verwenden. Und das habe ich gerade getan.

+0

Sie müsste auch für root verfügbar sein, was standardmäßig nicht ist. Ihre Antwort sollte eigentlich ein Kommentar sein. – Wtower

4

Oder Sie können brew verwenden, um ansible zu installieren. Um es tun würden, müssen Sie ausführen:

brew install ansible 

Wenn Sie irgendwelche früheren Installationen haben, ist es möglich, dass Sie eine Meldung wie diese sehen:

Error: The brew link step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink bin/ansible Target /usr/local/bin/ansible already exists. You may want to remove it: rm '/usr/local/bin/ansible'

To force the link and overwrite all conflicting files: brew link --overwrite ansible

To list all files that would be deleted: brew link --overwrite --dry-run ansible

Possible conflicting files are: /usr/local/bin/ansible /usr/local/bin/ansible-console /usr/local/bin/ansible-doc /usr/local/bin/ansible-galaxy /usr/local/bin/ansible-playbook /usr/local/bin/ansible-pull /usr/local/bin/ansible-vault

So lief brew link --overwrite ansible das zu beheben. Und jetzt können Sie alle Rollen ohne sudo installieren.

Beispiel:

» ansible-galaxy install bennojoy.redis
- downloading role 'redis', owned by bennojoy
- downloading role from https://github.com/bennojoy/redis/archive/master.tar.gz
- extracting bennojoy.redis to /usr/local/etc/ansible/roles/bennojoy.redis
- bennojoy.redis was installed successfully