我写的一些任务开始并且永远不会结束.Ansible不提供任何可以解释这一点的错误或日志,即使使用-vvvv选项也是如此.Playbook只是挂起,过了几个小时不会改变任何东西.
当我尝试手动运行我的任务时(通过SSH输入命令)一切都很好.
挂起的示例任务:
- name: apt upgrade
shell: apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
有没有办法看到stdout和stderr?我试过了:
- name: apt upgrade
shell: apt-get upgrade
register: hello
- debug: msg="{{ hello.stdout }}"
- debug: msg="{{ hello.stderr }}"
Run Code Online (Sandbox Code Playgroud)
但没有改变.
我确实有必要的权限,我传递了正确的sudo密码 - 其他需要sudo正确执行的任务.
我最近潜入了Ansible的一台服务器,发现它真的很有趣,省时省力.我正在运行一个Ubuntu专用服务器,并配置了许多用Python编写的Web应用程序和一些用PHP编写的Web应用程序.对于Python,我使用uwsgi作为HTTP网关.我编写了shell脚本来启动/重启几个进程,以便运行特定Web应用程序的实例.我每次都要做的是,连接ssh并导航到该特定应用程序并运行脚本.
我需要的
我一直试图找到一种方法来编写Ansible playbook,用一行命令从我的个人计算机上做所有这些,但我不知道如何做到这一点.我没有在互联网上找到一个非常解释性的(初学者)文档或帮助.
题
如何使用Ansible playbook重新启动Nginx?如何通过进程ID杀死进程?
我是ansible的新手.我有一个要求,要求我为AWS中托管的450多个Linux服务器提取操作系统版本.AWS不提供此功能 - 它建议我们从木偶或厨师那里获取它.
我创建了几个没有运行的简单剧本
---
- hosts: testmachine
user: ec2-user
sudo: yes
tasks:
- name: Update all packages to latest
yum: name=* state=latest
task:
- name: obtain OS version
shell: Redhat-release
Run Code Online (Sandbox Code Playgroud)
playbook应该输出一个带有主机名和操作系统版本的文本文件.任何有关这方面的见解将受到高度赞赏.
linux amazon-ec2 amazon-web-services ansible ansible-playbook
我有一个在不同主机上运行不同角色的剧本.是否可以将变量从一个主机上运行的一个角色传递到同一个playbook运行中运行的另一个主机上的另一个角色?或任何解决方法?
playbook
host1
role1
here I get some variables: var1 var2 ...etc
host2
role2
here I need to use var1 var2 ... etc from the above host/role
Run Code Online (Sandbox Code Playgroud)
role1中设置teh变量的任务db如下所示:
- shell: cd /ACE/conf && grep ^db.url local1.properties | awk -F/ '{print $4}' | awk -F? '{print $1}'
register: db
Run Code Online (Sandbox Code Playgroud)
更新:在第一台主机上,值是动态的,它就像一个始终更新的配置文件.在我使用role1将值存储在host1上的变量之后,然后移动到host2,运行role2并使用host1存储的变量对这些值进行处理.
我尝试使用hostvars:
{{ hostvars.LBL.db.stdout }}
{{ hostvars['LBL']['db'] }}
{{ hostvars['LBL']['db']['stdout'] }}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
in get_variables raise Exception("host not found: %s" % hostname) Exception: host not found: LBL
Run Code Online (Sandbox Code Playgroud)
LBL存在于主机中,我运行第一个角色
我在一台主机上设置了一个变量,我希望该变量可供其他主机使用.所有这些都在一本剧本中.可以吗?
hostvars不能像这样使用它:
--- …Run Code Online (Sandbox Code Playgroud) TL; DR:是否可以使用一个ansible-playbook命令链接两个剧本,其中一个剧本是密码认证而另一个剧本是密钥认证?(参见上一节的实际目的).
我有两本剧本,第二部是include第一部.
---
- name: PlaybookA # requires password authentication
hosts: sub.domain.ext
remote_user: root
roles:
- { role: role1, sudo: yes }
...
Run Code Online (Sandbox Code Playgroud)
---
- name: Run PlaybookA
include: PlaybookA.yml
- name: PlaybookB # requires ssh-key authentication
hosts: sub.domain.ext
remote_user: ansible
roles:
- { role: role2, sudo: yes }
...
Run Code Online (Sandbox Code Playgroud)
在Ansible(版本1.9.4或更低版本)中是否可以执行一个ansible-playbook命令,该命令将使用ssh-key身份验证成功运行PlaybookB,但是当PlaybookB包含PlaybookA时,使用密码身份验证运行PlaybookA?
如果Ansible 1.9.4或更低版本无法做到这一点,那么这可能是2.0.0+吗?
--ask-pass(或-k)作为启用密码验证的命令行开关.ask_pass了一个变量但似乎只能在其中设置ansible.cfg(我无法将其设置为Playbook变量以达到所需效果).ask_pass在剧本中设置指令会产生以下结果: …我知道如何使用Ansible创建AWS实例.现在我想要实现的是通过使用创建实例的相同playbook安装nginx来将该实例配置为Web服务器.
该剧本的目标是:
有可能与ansible?
我的 ansible playbook 只复制我指定的文件之一。该剧本运行完成,没有任何错误。如果我在剧本之外运行相同的命令,它将复制
我非常简单的剧本
---
- hosts: "dudes"
vars:
remote_user: root
tasks:
- name: Installs logstash-forwarder rpm
yum: name=logstash-forwarder state=present disable_gpg_check=yes
- name: Add the certs init and etc files into place
action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder.crt dest=/etc/pki/tls/certs/ owner=root group=root mode=644
action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc dest=/etc/logstash-forwarder owner=root group=root mode=644 force=yes
action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-etc-sysconfig dest=/etc/sysconfig/logstash-forwarder owner=root group=root mode=644 force=yes
action: copy src=/etc/ansible/files/logstash-forwarder/logstash-forwarder-init-d dest=/etc/init.d/logstash-forwarder mode=0755
- name: add logstash forwarder to chkconfig
command: chkconfig --add logstash-forwarder
notify:
- start logstash-forwarder
handlers:
- name: start …Run Code Online (Sandbox Code Playgroud) 如果系统安装了 Oracle Linux,如何检查已安装的操作系统并继续下载文件。
这就是我要做的
- hosts: all
become: true
gather_facts: true
tasks:
- name: Check if oracle linux is installed
shell: |
cat: /etc/system-release
register: os_name
ignore_errors: yes
- debug:
msg: "{{os_name.stdout}}"```
Run Code Online (Sandbox Code Playgroud) 如果我的问题有点基础的话,我对ansible很新.
场景:
我有一些远程主机组,如[EPCs] [客户端]和[测试人员]我能够按照我希望的方式配置它们.
问题:
我需要编写一个剧本,在运行时,会在运行时向用户询问库存.作为运行剧本的示例,应按以下方式提示用户:"输入要配置的EPC数量""输入要配置的客户端数量""输入要配置的测试人员数量"
会发生什么:
例如,用户分别输入2,5和8.现在,剧本应仅解决组[EPC]中的前2个节点,组[客户端]中的前5个节点以及组[测试人员]中的前7个节点.我不想创建大量的子组,例如,如果我有20个EPC,那么我不想为我的EPC定义20个组,我想要一些动态库存,它应该自动配置根据用户在运行时输入的机器使用vars_prompt选项或类似的东西
让我发布我的剧本的部分内容,以便更好地了解将要发生的事情:
---
- hosts: epcs # Now this is the part where I need a lot of flexibility
vars_prompt:
name: "what is your name?"
quest: "what is your quest?"
gather_facts: no
tasks:
- name: Check if path exists
stat: path=/home/khan/Desktop/tobefetched/file1.txt
register: st
- name: It exists
debug: msg='Path existence verified!'
when: st.stat.exists
- name: It doesn't exist
debug: msg="Path does not exist"
when: st.stat.exists == false
- name: Copy file2 …Run Code Online (Sandbox Code Playgroud) 我想使用 ansible playbook 将文件复制到 docker 容器。我怎样才能做到这一点 ?
- name: kapacitor conf
template: src=/home/debian/roles/tick_install/files/kapacitor.conf dest=/etc/kapacitor/kapaci
Run Code Online (Sandbox Code Playgroud)
my docker container = tick_kapacitor
Run Code Online (Sandbox Code Playgroud)