在为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)
我的问题是:
谢谢您的意见
因此,在阅读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 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时,传输成功,但脚本没有执行.
在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) 我有这个 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然后它的工作原理.但是我希望将变量包含在任务中,以便我可以将不同的变量分别保存在不同的任务中.
如何将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-webApp和tomcat-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都无法在我的调用中声明语法错误.任何帮助赞赏.
在Ansible 1.7中,我可以使用命令行中的--tags来运行该playbooks任务的子集.
但是我想要在我的剧本中加入一套角色,只运行与标签相匹配的任务.也就是说,我不想通过命令行传递它,因为它每次都是相同的.
起初我以为是这个命令,但这恰恰相反:使用这些标记标记任务而不是基于此过滤掉它们.
roles:
- { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }
Run Code Online (Sandbox Code Playgroud)
我可以想象使用条件实现它,但标签将是一种更优雅的方式来实现这一点.
有时我需要测试一些我在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) 我正在编写一本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来运行以下两个命令:
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"