Articles of ansible

Ansible不能使dir /$HOME/.ansible/cp

我运行ansible时遇到了一个非常奇怪的错误: 收集事实***************************************************** *************** 致命的:[i-0f55b6a4] =>不能使目录/$HOME/.ansible/cp:[错误13]权限被拒绝:'/ $ HOME' 任务:[任务1] ******************************************* ******************** 致命:没有主机匹配或所有主机已经失败 – 中止 玩回扣************************************************ ******************** 重试,使用:–limit @ / home / ubuntu / install.retry i-0f55b6a4:ok = 0改变= 0不可达= 1失败= 0 通常情况下,这个剧本运行没有问题,但我最近做了一些改变,以便调用ansible的程序从start-stop-daemon调用,这样我就可以作为服务运行。 最终的目标是在有需要时能够自动运行剧本的服务。 剧本的开始是这样的: — – hosts: w_vm:main sudo: True tasks: – name: Task #1 … sudo设置为True,所以我有点确定错误不在目标机器上。 生成的剧本的调用看起来像这样: ansible-playbook -i /tmp/ansible3397486563152037600.inventory \ /home/ubuntu/playbooks/main_playbook.yml \ -e @/home/ubuntu/extra_params.json 我不确定是否Could […]

如何在有限的sudo剧本中使用Ansible服务模块?

我正在编写一个剧本来部署一个应用程序。 我是SSH用户,而不是root用户。 我的应用程序完成部署后,我想重新启动它的服务。 显然,要重新启动服务,我需要某种sudo权限。 在我的/etc/sudoers文件中有: redadmin ALL=(root) NOPASSWD: /usr/sbin/service apache2 * 然而,当我运行我的Ansible剧本时,它会挂起,当它到达: – name: Restarting apache service: name=apache2 state=restarted sudo: yes 我怎样才能修改我的手册使用Ansible的service模块,而不给redadmin用户完全的root权限?

Ansible linux部署错误{“failed”:true,“parsed”:false}

我有3台Linux机器,一台用于部署,另外两台用于部署应用程序。 我使用Ansible这个,我有一个问题。 在我的部署过程中,我想远程执行这两台机器上的bash脚本。 我有一个playbook,app_stop.yml,看起来像这样: ### rel/app_stop.yml # # Erlang app stop playbook – hosts: fe gather_facts: false sudo: app roles: – app_stop 我的app_stopangular色有一个任务,当它从机器调用某些东西来ping应用程序,谁会用pong响应。 为了简化事情,我创build了一个bash脚本来回应pong,并且尝试运行它。 它给了我同样的错误。 这是app_stopangular色: – name: Is the Erlang app installed? stat: path="{{ app_install_dir }}/{{ app_name_short }}/bin/{{ app_name_short }}" register: bin – name: Ping the Erlang app command: "sudo /home/deploy/script.bash" when: bin.stat.exists == […]

通过可靠的方式调用远程bashfunction

是否有可能通过有效的ad-hoc命令(使用shell,命令模块?)调用在bash中定义的远程函数(例如,添加到存储在/etc/profile.d下的脚本之一中) 例如,我有以下function,可以查看apt历史logging的状态: function apt-history(){ case "$1" in install) cat /var/log/dpkg.log | grep 'install ' ;; upgrade|remove) cat /var/log/dpkg.log | grep $1 ;; rollback) cat /var/log/dpkg.log | grep upgrade | \ grep "$2" -A10000000 | \ grep "$3" -B10000000 | \ awk '{print $4"="$5}' ;; *) cat /var/log/dpkg.log ;; esac } 是否可以通过ad-hoc命令通过函数名直接调用这个函数? 我知道可以创build一个新的脚本并直接远程调用它,但这不是我想要实现的。 任何build议感激。

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

当我们运行一个剧本,启用详细输出时,在可靠的日志中,我们可以看到类似这样的内容: 2016-02-03 12:51:58,235 p=4105 u=root | PLAY RECAP 我想这个p=4105是playbook运行时的pid。 有没有办法在运行时(例如作为一个variables)在剧本中获得这个PID?

通过一些脚本在多台机器的目录下创build一个文件?

我必须在许多机器上用hello world在特定的目录下创build一个文件functon.txt 。 这是我到目前为止手动逐一login到每个框中并创build文件。 该目录是由root拥有的,所以我必须确保新文件也由root用户拥有。 david@machineA:~$ sudo su [sudo] password for david: root@machineA:/home/david# cd /opt/Potle/ouyt/wert/1 root@machineA:/opt/Potle/ouyt/wert/1# vi functon.txt root@machineA:/opt/Potle/ouyt/wert/1# ssh david@machineB david@machineB:~$ sudo su [sudo] password for david: root@machineB:/home/david# cd /opt/Potle/ouyt/wert/1 root@machineB:/opt/Potle/ouyt/wert/1# vi functon.txt root@machineB:/opt/Potle/ouyt/wert/1# ssh david@machineC ….. 现在我必须在200台左右的机器上这样做。 有什么办法可以通过一些脚本来做这些事情吗? 我可以多次input密码,但如果必须的话,我不想手动login到这些盒子,手工完成所有其他步骤。 我有一个文件hosts.txt ,其中包含每台机器逐行。 我可以逐行阅读这个文件,做上面的事情,但我不知道如何? 这只是我一次练习,所以任何简单或简单的方法应该没问题。 我甚至可以在脚本中对我的密码进行硬编码来完成这项工作。 什么是完成这项任务的最好方法?

升级到1.9后,使用sudo的Ansible文件复制失败

在剧本中,我使用sudo复制文件。 它曾经工作…直到我们迁移到Ansible 1.9 …从那以后,它失败,出现以下错误信息: “ssh连接closures等待sudo密码提示” 我提供了ssh和sudo密码(通过Ansible提示符),其他所有通过sudo运行的命令都是成功的(只有文件复制和模板失败)。 我的命令是: ansible-playbook -k –ask-become-pass –limit = testhost -C -D playbooks / debug.yml 和playbookd包含: – hosts: designsync gather_facts: yes tasks: – name: Make sure the syncmgr home folder exists action: file path=/home/syncmgr owner=syncmgr group=syncmgr mode=0755 state=directory sudo: yes sudo_user: syncmgr – name: Copy .cshrc file action: copy src=roles/designsync/files/syncmgr.cshrc dest=/home/syncmgr/.cshrc owner=syncmgr […]

如何处理envvariables的人口

虽然我的理解是,在不同的部署环境中使用环境variables来configuration应用程序是最佳做法,但我不知道pipe理这些环境并在其中填充variables的好方法。 以下是我正在考虑的方法: 在我们用来运行我们的应用程序的Upstart脚本中填充它们。 我们使用Ansible来configuration我们的服务器,它们通过一个静态的新贵脚本来复制,但是这可以用环境variables来模板化。 采用相同的方法,但使用/etc/environment 使用类似envdir东西,并再次使用可以填充文件。 另一个问题是在哪里存储的价值,我想在redis,但我愿意build议。 Ansible有一个“保险库”,我还没有看看哪一个可能是一个select。 这些值是API密钥和数据库URL之类的东西。 我真的只是想知道其他人使用什么方法。 我接受所有的build议。

shell的init:错误检索当前目录:getcwd – 通常的修复不工作

我有一个简单的脚本: #!/bin/bash for server in $(~/.ansible/ansible_hosts) do ssh $server "hostname; readlink /opt/mydir/mylink;" done 它工作正常 – 程序返回正确的主机名和链接 – 除了我在一些但不是所有的服务器上得到以下错误: shell-init:检索当前目录时出错:getcwd:无法访问父目录:没有这样的文件或目录 所有的目录都存在。 其中一个最常见的build议是添加一个cd,一个cd – 或一个cd /。 所有发生这一步时添加是一个额外的: chdir:检索当前目录时出错:getcwd:无法访问父目录:没有这样的文件或目录 我尝试了启动nfs守护进程,以避免我的homedir出现混乱,并用/ optreplace了/etc/init.d。 没有不同 这只是一个烦恼,除了当我尝试使用一个简单的SSH命令,而不是一个简单的剧本,它失败的服务器。 任何见解将不胜感激。

yum +信息是什么 – 没有包可用

我尝试在我的linux红帽版本 – 5.7上安装一个合适的工具 yum install ansible Loaded plugins: security Setting up Install Process No package ansible available. Nothing to do 没有安装在我的Linux机器上 – 当然! 所以为什么我得到 – 没有包可用。 以及如何解决这个问题? yum.repos.d的观点是: /etc/yum.repos.d]# ls rhel-debuginfo.repo rhel-source.repo service-cd-repo.repo stp-default- repo.repo 我已经解决了如下: ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=63.4 ms 更新 – […]