Articles of ansible

Ansible:尝试解压缩通过“get_url”模块获取的.tar.gz时出错

我在Debian(Jessie 8.2)虚拟机上使用Ansible 1.9.4。 我有一个存放在Google云端平台上的文件,通过“get_url”模块在远程获取。 但是当我尝试使用gzip解压缩时,出现错误: gzip: stdin: not in gzip format 我可以在上传文件之前取消存档,或者通过Google开发者控制台上的graphics界面进行检索。 你有什么可能导致这个问题的想法?

如何结合两个列表?

我有一个使用with_subelements的任务,但是对于大列表来说,速度太慢了(特别是大多数元素都有重复,而且我不需要为它们多次运行)。 所以我正在寻找一种方法来优化它。 我希望从列表中获得所有独特的元素 – 例如下面的示例中的settings : 库存: my_list: – { name: foo, settings: ['x', 'y', 'z'] } – { name: bar, settings: ['x', 'y', 'q', 'w'] } 任务: – name: get all settings set_fact: all_settings="{{ my_list|map(attribute='settings')|list }}" – name: show results debug: var=all_settings 结果: "var": { "all_settings": [ [ "x", "y", "z" ], [ "x", […]

优化Ansible playbooks以运行在许多主机上

我在SLES 11 SP4上运行Ansible 2.0的机器大概有430台,速度非常慢,我不能说明它为什么这么慢,但是如果限制库存中的机器数量,速度会更快。 运行一个3任务剧本(包括收集事实)花了大约7个小时,第三个任务是一个本地行动。 当我运行所有430库存时,需要花费相当多的时间来收集2台机器的事实文件,因为它完全处理了6台机器。 它使用了99.9%的CPU: root 11646 99.8 0.4 220188 61016 pts/1 Rl+ 07:24 6:41 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml … root 11651 0.1 0.4 187396 58828 pts/1 Sl+ 07:24 0:00 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml … root 11652 0.1 0.4 187812 59216 pts/1 Sl+ 07:24 0:00 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml … root 11653 0.1 […]

仅在Ansible中定义时才使用variables

我的同事和我使用Ansible来pipe理一组服务器。 我们在我们的本地主目录中使用.ansible.cfg文件来设置我们的本地环境,并将我们的剧本保存在一个git仓库中。 当对服务器进行身份validation时,我使用user1,并使用user2。 我们的服务器中有95%有这些帐户,但从历史上看,有几台服务器只有一个“用户”帐户。 我们使用host_vars为less数服务器设置remote_uservariables。 然而,在我们的剧本中,我们通常用“全部”来规定我们想要命中的服务器,并且在命令行中使用–limit参数来指定哪个服务器应该更新。 我们的服务器群是遗留下来的糟糕的devise糟糕的服务器,必须保持在线,直到他们在几年内退休,我们发现这种方法最适合我们的需求。 我们的问题是我们的remote_user参数是在我们的.ansible.cfg文件中设置的,它是以环境variables而不是脚本variables的forms公开的。 这意味着如果我们的任务包含: remote_user: "{{ remote_user }}" 它只适用于定义了该variables的主机 对于我们没有定义这个variables的95%的主机,任务失败。 有没有办法只使用variables,如果它被定义? 例如 如果定义了remote_user,则使用它,如果不是,则使用.ansible.cfg中设置的环境variables 注意:我知道我可以使用: – name: Do something remote_user: "{{ remote_user }}" when: remote_user is defined 在一个任务定义中,但这只适用于该任务,我不想更新所有任务 当我真正需要的是在主机定义中可用时,即: — – hosts: all remote_user: "{{ remote_user }}" when: remote_user is defined 但在Ansible中这是非法的

如何在一个脚本中为不同的剧本指定不同的主机

据我所知,每个剧本都需要一个主机条目。 我想知道,如果我创build了一个包含其他剧本的容器剧本,我可以参数化每个剧本包含的主机。 所以像 — – include playbook_1.yml hosts: tag_postgres – include: playbook_2.yml hosts: tag_rabbitmq 我可以把所有不同的剧本放在一个脚本中,然后调用,但是这样我就无法从一个剧本中重用一些set_fact到另一个剧本,因此有很多任务重复。 问题的另一个必然结果是,我可以在亚马逊上推出ec2s hosts: localhost 并启动ec2s的configuration,这基本上将configuration来自-i ec2.py的库存 并具有指定的主机 hosts: tag_<some_tag> 通过相同的剧本或一套包含的剧本(不同的angular色) 更新:没有令人满意的解决scheme呢。

如何使用Ansible在文件中replace正则expression式?

基于这个例子: – lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' backrefs=yes 从这个文档中 ,它试图在Ansible中进行正则expression式replace。 Ansible版本 user@server:/home$ ansible –version ansible 2.1.1.0 /path/到/文件: helloworld Ansible片段: – lineinfile: dest: /path/to/file regexp='^(hello)world$' line='\1030' 尝试2 – lineinfile: dest: /path/to/file regexp='^(hello)world$' line="\1030" 预期结果: hello030 目前的结果: \1030 问题 为什么结果是\1030而不是hello030 ? 如何解决?

使用Ansible创buildstream浪盒?

我是Ansible的新手,如果我可以更好地使用Vagrant来创build虚拟机实例(在EC2和本地虚拟机上)并仅使用Ansible进行configuration,或者如果我可以/应该使用Ansible来创buildEC2实例和本地虚拟机,我会有点困惑。

我在哪里可以find最新的错误日志

我使用了一个可靠的脚本来启动一个服务器configuration。 我从服务器内部运行脚本,并在本地主机清单上执行所有操作。 现在我已经closures服务器的SSH连接,我找不到日志文件。 标准日志path在哪里? 在/ var / log下没有任何可靠的文件。 我再次运行脚本,并期望错误再次出现,但这不是一个好的解决scheme,因为脚本需要几个小时才能运行到错误点。

为什么通过Ansible将实例添加到负载均衡器时,我的实例无法正常运行?

我试图用ec2_elb模块将一个EC2实例添加到一个Elasitic负载平衡器,使用一个Ansible操作手册。 这是应该这样做的任务: – name: "Add host to load balancer {{ load_balancer_name }}" sudo: false local_action: module: ec2_elb state: present wait: true region: "{{ region }}" ec2_elbs: ['{{ load_balancer_name }}'] instance_id: "{{ ec2_id }}" 然而,它通常会失败,输出(冗长): TASK: [Add host to load balancer ApiELB-staging] ****************************** <127.0.0.1> REMOTE_MODULE ec2_elb region=us-east-1 state=present instance_id=i-eb7e0cc7 <127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1409156786.81-113716163813868 […]

是否有可能用一组不同的主机“包含”任务文件?

理想情况下,我希望能够做到这样的事情: – include: deregister_from_loadbalancer.yml delegate_to: loadbalancer 在这种方式下,我仍然可以访问主机的variables,但是负载均衡器主机正在进行操作。 为什么不分开戏剧? 我不能把它分解成单独的游戏,因为我一次只能从负载平衡器中取出机器。 分成多个戏剧意味着像这样: – hosts: loadbalancers tasks: – include: remove_from_loadbalancer.yml vars: machine: "{{ item }}" with_items: "{{ groups['webservers'] }}" # at this point in the play I'm being fired for gross incompetence – hosts: webservers tasks: # … update them – hosts: loadbalancers tasks: – include: add_to_loadbalancer.yml vars: […]