目录1、play和playbook和role2、幂等性3、清单4、配置文件(ansible.cfg)5、变量5.1在playbook中使用变量:5.2在playbook中使用变量文件: 6、事实7、循环8、处理程序9、块10、动态清单文件11、角色1、play和playbook和rolerole由多个playbook组成,playbook由多个play组成,play由多个task组成。play是由yaml格式的文本文件。playbook中play和任务列出的顺序很重要,因为ansible会按照相同的顺序运行它们简单的playbook(一个play):简单的playbook(两个play):pl
我一直在尝试创建一个非常简单的Ansible剧本,它将重启服务器并等待它恢复。我过去在Ansible1.9上有过一个有效的,但我最近升级到2.1.1.0但失败了。我正在重启的主机名为idm,IP为192.168.200.23。剧本正在使用命令从我的主机192.168.200.1运行$ansible-playbookreboot.yml-vvvv这是我正在使用的剧本----hosts:idmtasks:-name:Restartserverbecome:yesshell:sleep2&&/sbin/shutdown-rnow"Ansiblesystempackageupgraded"-n
我正在尝试将当前用户添加到系统中的一个组,然后执行一个需要该组权限的命令。我的剧本是这样的:-name:AddthisusertoRVMgroupsudo:trueuser:state=presentname=vagrantappend=yesgroups=rvmgroup=rvm-name:InstallRuby1.9.3command:rvminstallruby-1.9.3-p448creates=/usr/local/rvm/bin/ruby-1.9.3-p448问题是所有这些都发生在同一个shell中。vagrant的shell还没有用新的组更新。是否有一种干净的方法来刷新用
我是ansible的新手。我有一个要求,要求我为AWS中托管的450多个Linux服务器提取操作系统版本。AWS不提供此功能——它建议我们从puppet或chef那里获取它。我创建了一些无法运行的简单剧本----hosts:testmachineuser:ec2-usersudo:yestasks:-name:Updateallpackagestolatestyum:name=*state=latesttask:-name:obtainOSversionshell:Redhat-release剧本应该输出一个包含主机名和操作系统版本的文本文件。对此的任何见解将不胜感激。
最初我使用makefile在linux中部署我的应用程序。我有各种sed命令来替换PHP上传文件大小、帖子大小、日志文件位置等变量。现在我正在转向ansible。我知道我可以复制文件,但我如何更改conf文件?就像我只想更改upload_filesize=50M参数一样。我不想复制整个conf文件,然后用我的文件替换。有时它只是一行的改变。有没有更好的方法来编辑ansible中的配置文件? 最佳答案 如果它是一个INI文件,那么ini_file模块(http://docs.ansible.com/ini_file_module.ht
Vagrant使用VirtualBox创建一个开发环境,然后使用ansible提供它。作为配置的一部分,ansible运行重启,然后等待SSH恢复。这按预期工作,但因为vagrant机器不是从“vagrantup”命令启动的,所以当盒子从重启中恢复时,同步文件夹没有正确安装。运行“vagrantreload”修复机器并再次挂载共享。有没有办法告诉vagrant重新加载服务器或执行手动重启后vagrant会做的所有事情?当SSH-ed进入vagrantbox时简单地运行“sudoreboot”也会产生同样的问题。 最佳答案 Vagra
您将如何使用Ansible确认服务是否在特定端口上运行?例如:Apache是否在端口80上运行?MySQL是否正在监听端口3912?Tomcat是否正在监听端口8080?我知道有service和wait_for命令,它们分别检查服务是否正在运行以及端口是否正在使用-但我没有找到到目前为止检查特定服务是否正在监听特定端口的任何内容。service和wait_for将指示有一个服务和一个端口,但不能保证该端口被该特定服务占用——它可能被任何东西占用。wait_for,据我理解,只是检查它是否被使用。wait_for上有一个regex_search参数,它提到在套接字连接中搜索特定字符串,但
我想提供子网中只能使用Linux跳转主机访问的Windows主机。Windows机器使用winrm连接方式。Linux跳转服务器可通过SSH访问。如果可以直接访问Windows主机,我没有问题:ansible_connection:winrm如果我尝试通过以下方式将任务委派给Linux跳转服务器(可以直接访问Windows):-name:Pingwindowshosts:windows_machinestasks:-name:pingwin_ping:delegate_to:"{{item}}"with_items:"{{groups['jump_servers'][0]}}"它尝试连
我正在通过Ansible执行shell命令。有时我没有完整的文件夹名称。假设我有目录名solr4.7.0。在shell中我可以输入cdsolr*。但是在ansible中我做不到:chdir=/var/solr*有什么解决方法吗? 最佳答案 没有。例如,command模块的chdir=参数不支持通配符。您可以使用registervariable完成您想要的事情存储ls命令的输出:-shell:ls-dsolr*register:dir_name-command:some_commandargs:chdir:"{{dir_name.st
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion目前我的所有部署脚本都在shell中,它安装并配置了大约10个程序。我认为shell是一个很棒的工具:模块化:每个脚本只有一个程序,这样我就可以将程序分散到不同的服务器上。简单:Shell脚本非常简单,不需要安装任何其他软件。一键式:我只需运行一次shell脚本,一切就绪。不可知论者:大多数程序员都能理解shell,不需要知道如何使用特定程序。版本控制:因为我的代码在GitHub上一个简单