标签: ansible-playbook

如何为文件中的动态库存提取的服务器定义ssh私钥

在为ssh私钥文件编写ansible playbook时遇到了一个配置问题.

我们知道,我们可以在静态库存服务器的ansible hosts文件中定义与主机服务器,ip和相关ssh私钥的组合.

但我不知道如何使用动态库存服务器来定义它.

例如:

---
- hosts: tag_Name_server1
  gather_facts: no
  roles:
    - role1

- hosts: tag_Name_server2
  gather_facts: no
  roles:
    - roles2
Run Code Online (Sandbox Code Playgroud)

下面的命令用于调用该剧本:

ansible-playbook test.yml -i ec2.py --private-key ~/.ssh/SSHKEY.pem
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 如何在ansible文件中定义〜/ .ssh/SSHKEY.pem,而不是在命令行中定义
  2. 我想playbook中可能有一个参数,比如"gather_facts"来定义哪个私钥应该用于上面的主机,但看起来没有这样的参数?
  3. 如果无法在文件中定义私钥,如果不同的密钥文件将用于一个剧本的不同动态获取服务器,那么应​​该在命令行中定义什么?

谢谢您的意见

ansible ansible-playbook

52
推荐指数
5
解决办法
10万
查看次数

Ansible Handler通知vs注册

因此,在阅读Ansible文档后,我发现Handlers只有在任务报告更改时才会触发,例如:

some tasks ...
notify: nginx_restart

# our handler
- name: nginx_restart
Run Code Online (Sandbox Code Playgroud)

VS

some tasks ...
register: nginx_restart

# do this after nginx_restart changes
when: nginx_restart|changed
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别吗?我什么时候应该使用它们?对我来说,register这里似乎有更多的功能,除非我遗漏了一些东西......

ansible ansible-playbook

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

如何使用Ansible在远程服务器上执行shell脚本?

我打算使用Ansible playbook在远程服务器上执行shell脚本.

test.sh:

touch test.txt
Run Code Online (Sandbox Code Playgroud)

剧本:

---
- name: Transfer and execute a script.
  hosts: server
  user: test_user
  sudo: yes
  tasks:
     - name: Transfer the script
       copy: src=test.sh dest=/home/test_user mode=0777

     - name: Execute the script
       local_action: command sudo sh /home/test_user/test.sh
Run Code Online (Sandbox Code Playgroud)

当我运行playbook时,传输成功,但脚本没有执行.

shell remote-server ansible ansible-playbook

48
推荐指数
4
解决办法
14万
查看次数

Ansible - 打印消息 - 调试:msg ="line1 \n {{var2}} \n line3 with var3 = {{var3}}"

在Ansible(1.9.4)或2.0.0中

我运行了以下操作:

- debug: msg="line1 \n {{ var2 }} \n line3 with var3 = {{ var3 }}"
Run Code Online (Sandbox Code Playgroud)

$ cat roles/setup_jenkins_slave/tasks/main.yml

- debug: msg="Installing swarm slave = {{ slave_name }} at {{ slaves_dir }}/{{ slave_name }}"
  tags:
    - koba

- debug: msg="1 == Slave properties = fsroot[ {{ slave_fsroot }} ], master[ {{ slave_master }} ], connectingToMasterAs[ {{ slave_user }} ], description[ {{ slave_desc }} ], No.Of.Executors[ {{ slave_execs }} ], LABELs[ {{ slave_labels }} ], mode[ {{ slave_mode }} ]" …
Run Code Online (Sandbox Code Playgroud)

action newline roles ansible ansible-playbook

47
推荐指数
7
解决办法
5万
查看次数

如何在ansible中的tasks文件中编写变量

我有这个 play.yml

---
- hosts: 127.0.0.1
  connection: local
  sudo: false

  tasks:
     - include: apache.yml
Run Code Online (Sandbox Code Playgroud)

我的Apache看起来像这样:

vars:
    url: czxcxz

- name: Download apache
  shell: wget {{url}} 
Run Code Online (Sandbox Code Playgroud)

这给了我错误.

如果我删除vars然后它的工作原理.但是我希望将变量包含在任务中,以便我可以将不同的变量分别保存在不同的任务中.

ansible ansible-playbook

46
推荐指数
4
解决办法
10万
查看次数

在--extra-vars中传递数组 - Ansible

如何将yaml数组传递给--extra-varsAnsible playbook.Ansible文档没有声明它的语法,也没有在任何互联网资源上找到它.

我的意思是如果我有一本剧本:

---
  - hosts: {{hostName}}
  - remote_user: admin
  ...
Run Code Online (Sandbox Code Playgroud)

然后我应该把我的剧本称为

ansible-playbook DeployWar.yml --extra-vars="hostName=tomcat-webApp"

但我想运行这个剧本在两台服务器上说tomcat-webApptomcat-all,我想从出方控制它即使用--extra-vars.我试图做的是:

ansible-playbook DeployWar.yml --extra-vars="hostName=[tomcat-webApp, tomcat-all]"

ansible-playbook DeployWar.yml --extra-vars="hostName={tomcat-webApp, tomcat-all}"

ansible-playbook DeployWar.yml --extra-vars="[{hostName: tomcat-webApp}, {hostName: tomcat-all}]"
Run Code Online (Sandbox Code Playgroud)

但在所有情况下,playbook都无法在我的调用中声明语法错误.任何帮助赞赏.

yaml ansible-playbook

46
推荐指数
4
解决办法
6万
查看次数

Ansible:在剧本中,按标签过滤角色而不通过命令行

在Ansible 1.7中,我可以使用命令行中的--tags来运行该playbooks任务的子集.

但是我想要在我的剧本中加入一套角色,只运行与标签相匹配的任务.也就是说,我不想通过命令行传递它,因为它每次都是相同的.

起初我以为是这个命令,但这恰恰相反:使用这些标记标记任务而不是基于此过滤掉它们.

roles:
  - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }
Run Code Online (Sandbox Code Playgroud)

我可以想象使用条件实现它,但标签将是一种更优雅的方式来实现这一点.

ansible ansible-playbook

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

如何在ansible中测试jinja2模板?

有时我需要测试一些我在ansible角色中使用的jinja2模板.这样做最简单的方法是什么?

例如,我有一个模板(test.j2):

{% if users is defined and users %}
{% for user in users %}{{ user }}
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

和vars(在group_vars/all中):

---
users:
  - Mike
  - Smith
  - Klara
  - Alex
Run Code Online (Sandbox Code Playgroud)

jinja2 ansible ansible-playbook ansible-template

46
推荐指数
4
解决办法
4万
查看次数

在检查模式下运行时跳过Ansible任务?

我正在编写一本Ansible剧本,并且有一项任务在检查模式下总是会失败:

hosts: ...
tasks:
    - set_fact: filename="{{ansible_date_time.iso8601}}"
    - file: state=touch name={{filename}}
    - file: state=link src={{filename}} dest=latest
Run Code Online (Sandbox Code Playgroud)

在检查模式下,将不会创建该文件,因此link任务将始终失败.有没有办法在检查模式下运行时标记要跳过的任务?就像是:

- file: state=link src={{filename}} dest=latest
  when: not check_mode
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

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

如何通过Ansible shell运行apt更新和升级

我正在尝试使用Ansible来运行以下两个命令:

sudo apt-get update && sudo apt-get upgrade -y

我知道你可以使用ansible:

ansible all -m shell -u user -K -a "uptime"

会运行以下命令吗?或者我必须使用某种raw命令

ansible all -m shell -u user -K -a "sudo apt-get update && sudo apt-get upgrade -y"

ansible ansible-playbook

43
推荐指数
3
解决办法
6万
查看次数