标签: ansible-playbook

如何在ansible命令中提到通配符

我正在通过Ansible执行shell命令.

有时我没有完整的foldername.假设我有dirname solr4.7.0.

在shell中我可以输入cd solr*.

但在ansible我做不到:

chdir=/var/solr*

有没有解决方法?

linux ansible ansible-playbook

13
推荐指数
3
解决办法
2万
查看次数

在当前Ansible角色的文件部分中查找文件名

我是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'目录的根目录中执行.我可以添加角色文件目录的路径,但有更优雅的方式吗?

ansible ansible-playbook

12
推荐指数
2
解决办法
2万
查看次数

Ansible多个主机端口转发

我有多个主机的主机库存,每个主机都有端口转发,主机文件是:

[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)

知道怎么解决这个???

python networking portforwarding ansible ansible-playbook

12
推荐指数
1
解决办法
7047
查看次数

使用ansible SSH到远程服务器

我正在使用ansible来自动执行某些任务.其中一个要求我ssh到服务器A,然后从A到B再从B到B.然后我似乎无法找到任何方法来获得这样做.有什么建议?

ansible ansible-playbook

12
推荐指数
2
解决办法
5727
查看次数

如何为ansible中的变量分配随机数?

这是一个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 ansible-playbook

12
推荐指数
1
解决办法
1万
查看次数

Ansible最佳实践不重复共同的作用

在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中有一个任务,它既针对公共角色,也针对公共角色.但后来我不能单独配置一个常见的网络服务器或数据库服务器.

roles organization ansible ansible-playbook

12
推荐指数
2
解决办法
7627
查看次数

Ansible:当"不"满足"when"条件时,如何避免注册变量?

我有以下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 ansible-playbook

12
推荐指数
1
解决办法
1万
查看次数

可以使用Ansible authorized_key独占多个键吗?

我在使用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选项?

ubuntu authorized-keys ansible ansible-playbook

12
推荐指数
3
解决办法
5819
查看次数

获取正在运行的剧本的pid,以在该剧本中使用

当我们运行一个启用了详细输出的剧本时,在ansible日志中,我们可以看到以下内容:

2016-02-03 12:51:58,235 p=4105 u=root | PLAY RECAP

我猜这p=4105是剧本运行时的pid。

有没有办法在运行时在剧本中获取此pid(例如,作为变量)?

linux pid ansible ansible-playbook

11
推荐指数
1
解决办法
2255
查看次数

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 :: …

vagrant ansible ansible-playbook

11
推荐指数
2
解决办法
3689
查看次数