use*_*834 11 vagrant ansible ansible-playbook
我有这棵树:
??? plays
? ??? ansible.cfg
? ??? playbook_01.yml
? ??? playbook_02.yml
? ??? playbook_03.yml
??? README.rst
??? roles
? ??? role_A
? ? ??? files
? ? ??? tasks
? ? ??? main.yml
? ??? role_B
? ??? files
? ??? tasks
? ??? main.yml
??? serverlist
? ??? client1_serverlist_prod
? ??? client1_serverlist_test
? ??? client1_serverlist_train
? ??? client2_serverlist_prod
? ??? client2_serverlist_test
? ??? client2_serverlist_train
??? vagrant
??? Vagrantfile
Run Code Online (Sandbox Code Playgroud)
在play文件夹中使用ansible.cfg ::
$ cat plays/ansible.cfg
[defaults]
roles_path=../roles/
$
Run Code Online (Sandbox Code Playgroud)
我从vagrant打电话给ansible.playbook ::
$ grep playbook vagrant/Vagrantfile
ansible.playbook = "../plays/playbook_01.yml
Run Code Online (Sandbox Code Playgroud)
在playbook_01.yml上::
$ cat plays/playbook_01.yml
- hosts: vagrant
vars:
user: fox
home: /home/fox
roles:
- role_B
Run Code Online (Sandbox Code Playgroud)
与role_B ::
$ cat roles/role_B/tasks/main.yml
---
- name: Create user group
group: name={{ user }} state=present
- name: Create home directory for user
file: state=directory path={{ home }} group=www-data owner={{ user }}
$
Run Code Online (Sandbox Code Playgroud)
但是当只看到play文件夹中的角色时,我得到了这个错误::
vagrant$ vagrant provision
==> vagrant: Running provisioner: ansible...
PYTHONUNBUFFERED=1 ANSIBLE_HOST_KEY_CHECKING=false ANSIBLE_FORCE_COLOR=true
ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -o
ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook
--user=vagrant --connection=ssh --timeout=30 --limit='vagrant'
--inventory-file=/home/luis/lab/sandbox/akd-iac/stack/vagrant/.vagrant/provisioners/ansible/inventory
--sudo -vvvv ../plays/playbook_01.yml
ERROR: cannot find role in
~/stack/plays/roles/role_B or
~/stack/plays/role_B or /etc/ansible/roles/role_B
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
vagrant$
Run Code Online (Sandbox Code Playgroud)
我只需将“角色”文件夹移动到“plays”文件夹中并删除“play/ansible.cfg”即可使其工作:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 plays\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 playbook_01.yml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 playbook_02.yml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 playbook_03.yml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 roles\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 role_A\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 files\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tasks\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yml\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 role_B\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 files\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tasks\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.rst\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 serverlist\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 client1_serverlist_prod\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 client1_serverlist_test\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 client1_serverlist_train\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 client2_serverlist_prod\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 client2_serverlist_test\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 client2_serverlist_train\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vagrant\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Vagrantfile\nRun Code Online (Sandbox Code Playgroud)\n\n有关使其工作的 ansible.cfg 配置的详细信息::
\n\n$ ls ~/.ansible.cfg\nls: cannot access ~/.ansible.cfg: No such file or directory\n\n$ grep roles_path /etc/ansible/ansible.cfg\n#roles_path = /etc/ansible/roles\n\n$ echo $ANSIBLE_CONFIG\n\n$\nRun Code Online (Sandbox Code Playgroud)\n\n我仍然从 vagrant 调用 ansible.playbook::
\n\n$ grep playbook vagrant/Vagrantfile\nansible.playbook = "../plays/playbook_01.yml\nRun Code Online (Sandbox Code Playgroud)\n\n在 playbook_01.yml 上::
\n\n$ cat plays/playbook_01.yml\n- hosts: vagrant\n vars:\n user: fox\n home: /home/fox\n roles:\n - role_B\nRun Code Online (Sandbox Code Playgroud)\n\n与角色_B::
\n\n$ cat roles/role_B/tasks/main.yml\n---\n- name: Create user group\n group: name={{ user }} state=present\n\n- name: Check Python version\n command: python --version\n register: pyver\n\n- name: Print version\n debug:\n msg: "Python Version: {{ pyver.stderr }}"\nRun Code Online (Sandbox Code Playgroud)\n\n通过这个修改,效果就像一个魅力:
\n\n$ vagrant provision\n==> vagrant: Running provisioner: ansible...\n\nPLAY [vagrant] ************************************************************\nGATHERING FACTS ***********************************************************\n ok: [vagrant]\nTASK: [role_B | Create user group] ****************************************\n ok: [vagrant]\nTASK: [role_B | Check Python version] *************************************\n changed: [vagrant]\nTASK: [role_B | Print version] ********************************************\n ok: [vagrant] => {\n "msg": "Python Version: Python 2.7.9"\n}\nPLAY RECAP ****************************************************************\nvagrant : ok=4 changed=1 unreachable=0 failed=0\n$\nRun Code Online (Sandbox Code Playgroud)\n\n看起来该角色文件夹需要位于 playbooks live 文件夹内。
\n| 归档时间: |
|
| 查看次数: |
3689 次 |
| 最近记录: |