我正在通过Ansible执行shell命令.
有时我没有完整的foldername.假设我有dirname solr4.7.0.
在shell中我可以输入cd solr*.
但在ansible我做不到:
chdir=/var/solr*
有没有解决方法?
我是Ansible的新手,我正在尝试创建一个将文件复制到远程服务器的角色.每次我运行playbook时,本地文件都可以有不同的名称,但需要远程复制到同一名称,如下所示:
- name: copy file
copy:
src=*.txt
dest=/path/to/fixedname.txt
Run Code Online (Sandbox Code Playgroud)
Ansible不允许使用通配符,所以当我用主要剧本中的任务编写一个简单的剧本时,我可以这样做:
- name: find the filename
connection: local
shell: "ls -1 files/*.txt"
register: myfile
- name: copy file
copy:
src="files/{{ item }}"
dest=/path/to/fixedname.txt
with_items:
- myfile.stdout_lines
Run Code Online (Sandbox Code Playgroud)
但是,当我将任务移动到角色时,第一个操作不再起作用,因为相对路径是相对于角色,而playbook在'roles'目录的根目录中执行.我可以添加角色文件目录的路径,但有更优雅的方式吗?
我有多个主机的主机库存,每个主机都有端口转发,主机文件是:
[all]
10.80.238.11:20003
10.80.238.11:20001
10.80.238.11:20007
10.80.238.11:20009
Run Code Online (Sandbox Code Playgroud)
我试图用剧本来ping它们,但是在这种情况下总是从第一次输入获得响应而10.80.238.11:20003不是来自其他人.身份验证已经到位,无论我移动到第一个位置的主机我都得到了响应而不是其他人,我的剧本是:
---
- hosts: all
remote_user: root
gather_facts: no
tasks:
- name: test connection
ping:
Run Code Online (Sandbox Code Playgroud)
知道怎么解决这个???
我正在使用ansible来自动执行某些任务.其中一个要求我ssh到服务器A,然后从A到B再从B到B.然后我似乎无法找到任何方法来获得这样做.有什么建议?
这是一个ansible脚本,我期望打印出相同的随机数三次.相反,它打印出三个随机数.如何为ansible中的变量分配一个随机数,以便在整个剧本中修复它?
---
- name: Test random filter
hosts: localhost
gather_facts: False
vars:
random_number: "{{ 100 | random }}"
tasks:
- name: Print the random number
debug: var=random_number
- name: Print the random number
debug: var=random_number
- name: Print the random number
debug: var=random_number
Run Code Online (Sandbox Code Playgroud) 在Ansible最佳实践页面上:http://docs.ansible.com/ansible/playbooks_best_practices.html#top-level-playbooks-are-separated-by-role 它显示了一个示例,其中主要playbook site.yml包含一对其他顶级剧本webservers.yml和dbservers.yml.在这些剧本中,他们每个人都有共同的角色.我将所有组的一些库存文件在一台主机上运行.另一个库存文件我每个组都有一个主机.对于组中一个主机的情况,如果我运行site.yml,您可以看到共同角色被播放两次,一个用于webservers.yml,另一个用于dbservers.yml.
什么是避免这种情况的解决方案?我想你可以从webservers.yml和dbservers.yml中取出共同的角色,而在site.yml中有一个任务,它既针对公共角色,也针对公共角色.但后来我不能单独配置一个常见的网络服务器或数据库服务器.
我有以下Ansible Playbook代码:
- name: Users | Generate password for user (Debian/Ubuntu)
shell: makepasswd --chars=20
register: make_password
when: ansible_distribution in ['Debian', 'Ubuntu']
- name: Users | Generate password for user (Fedora)
shell: makepasswd -m 20 -M 20
register: make_password
when: ansible_distribution in ['Fedora', 'Amazon']
- name: Users | Generate password for user (CentOS)
shell: mkpasswd -l 20
register: make_password
when: ansible_distribution in ['CentOS']
- name: debug
debug: var=make_password
Run Code Online (Sandbox Code Playgroud)
哪个输出:
TASK: [users | debug]
ok: [127.0.0.1] => {
"var": {
"make_password": { …Run Code Online (Sandbox Code Playgroud) 我在使用Ansible时相当新,并且一直在这里阅读谷歌并且还没有找到答案.
我的情况是我在服务器上有1个用户,但需要在其authorized_keys文件中放入2-3个不同的pub键.
我可以成功删除所有密钥,或使用此脚本添加所有密钥:
---
- hosts: all
tasks:
- name: update SSH keys
authorized_key:
user: <user>
key: "{{ lookup('file', item) }}"
state: present
#exclusive: yes
with_fileglob:
- ../files/pub_keys/*.pub
Run Code Online (Sandbox Code Playgroud)
随着present标志,它读取并添加所有键.使用该absent标志,它将删除列出的所有键.
问题是我有一个仅在服务器上的旧密钥,我想删除/覆盖它,并且为将来的部署覆盖可能在服务器上而不是在我的剧本中的任何未授权密钥.
使用exclusive标志它只需要最后一个键并添加它.如果它循环并重复添加所有键,这将是太棒了.如果有一种方法可以在Ansible中执行此操作,我还没有找到它.
有没有办法循环pub文件并同时使用该exclusive选项?
当我们运行一个启用了详细输出的剧本时,在ansible日志中,我们可以看到以下内容:
2016-02-03 12:51:58,235 p=4105 u=root | PLAY RECAP
我猜这p=4105是剧本运行时的pid。
有没有办法在运行时在剧本中获取此pid(例如,作为变量)?
我有这棵树:
??? 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 :: …
ansible ×10
ansible-playbook ×10
linux ×2
networking ×1
organization ×1
pid ×1
python ×1
roles ×1
ubuntu ×1
vagrant ×1