Articles of ansible

将手册中列表的列表传递给单个命令(而不是with_items)

我有两组主机:dc1和dc2。 也结合到一个DC组。 我需要将来自外部DC的主机的IP地址列表传递给命令。 with_items根本不起作用。 应该是这样的: somescript -H 10.10.10.3 -H 10.10.10.4 所以有2点:1.获得DC组中的主机列表,不包括主机主组中的主机列表。 不知道这是否可能,所以肮脏的方法是设置一个remote_dcvariables(或数组)。 假设我们有一个来自p.1的主机列表:groups [remote_dc]。 如何使用它作为hostvars [key] ['ansible_eth1'] ['ipv4'] ['address']的密钥并获得结果作为列表? 现在我不得不使用一种非常肮脏的方式:我为每个DC组创build了一个remote_addresses列表,并且像这样迭代: command: somescript -H {{ remote_addresses|join(' -H ') }} 那么是否有一个合适的方法来实现p.1和p.2并省略手动创buildip地址列表?

如果已经安装使用ansible,则跳到更快

我正在使用可以部署到服务器。 apt阶段(这是Ubuntu)需要很长时间才能运行,即使已经安装了正确的版本(我猜它只是运行,看到没有什么需要安装) 示例命令: – name: set up apt packages action: apt pkg=nginx=1.4.6-1ubuntu3.3 state=present update_cache=yes (我有相当多的这些,所以需要相当一段时间) 有没有办法可以“找出”pkg已经安装并运行/跳过这个命令更快?

命令不能在“at_item”中执行完整的剧本

我是新手,并且正在尝试用最简单的方法为MongoDB备份写一个基本的手册。 这是我想要做的: — – hosts: mongo tasks: – name: Mongo Dump command: mongodump –out mdb_backup/mongodb_backup/ – name: MongoDb Backup command: "{{item}} chdir=~/mdb_backup/mongodb_backup/" with_items: – pwd – git add – git commit -m "Updates" – git push origin master 而我的错误是: "warnings": ["Consider using git module rather than running git"]} [WARNING]: Consider using git module rather than […]

Ansible:将所有主机的IP添加到所有其他主机的/ etc / hosts中

因此,我正在部署一个小型3节点群集,并且需要将我的清单中定义的公共IP地址添加到所有节点的所有/ etc / hosts文件中。 我试图使用以下,但它给我一个错误: – name: Add IP address of all hosts to all hosts lineinfile: dest: /etc/hosts line: '{{ hostvars[item]["ansible_host"] }} {{ hostvars[item]["ansible_hostname"] }} {{ hostvars[item]["ansible_nodename"] }}' state: present with_items: groups['all'] 错误是: 致命:[app1.domain.com]:失败! => {“failed”:true,“msg”:“field'args'有一个无效的值,其中包含一个未定义的variables,错误是:'ansible.vars.hostvars.HostVars object'属性u \“groups ['all'] \”\ n \ n错误似乎在'/Users/k/Projects/Ansible/roles/common/tasks/main.yml'中:第29行,第3列根据确切的语法问题,可能会在文件的其他地方出现。\ n \ n违规行显示为:\ n \ n \ n-名称:将所有主机的IP地址添加到所有主机\ n这里\ n“} 我不知道发生了什么事。 […]

Ansiblevariables和文本replace

我正在尝试使用Ansible将一个示例文本replace为一个variables。 我曾尝试使用没有引号,“”和“,但似乎没有工作。 我也尝试使用replace模块和lineinfile模块。 请让我知道我做错了什么。 – hosts: 10.1.1.10 become: yes vars: server1: 1a: "ED:5A:13:AA:34:20" 2a: "ED:5A:13:AA:34:21" tasks: – name: Replace mac address in file lineinfile: path: /tmp/file.json.j2 regexp: 'FILL_THIS_IN' line: "{{ server1.1a }}"

如何循环接口事实

来自ansible的设置模块提供了ansible_interfaces的事实 "ansible_interfaces": [ "lo", "eth0", "eth1" ], 和每个接口的一些事实: "ansible_eth0": { "active": true, "device": "eth0", "ipv4": { "address": "192.168.10.2", "broadcast": "192.168.10.255", "netmask": "255.255.255.0", "network": "192.168.10.0" }, "macaddress": "52:54:00:5c:c1:36", "module": "virtio_net", "mtu": 1500, "pciid": "virtio0", "promisc": false, "type": "ether" } 如何使用ansible_interfaces事实来循环可用的接口? tasks: – name: find interface facts debug: msg=ansible_{{ item }} with_items: "{{ ansible_interfaces }}" 这显然不起作用,因为它打印出stringansible_lo,ansible_eth0和ansible_eth1,但我希望它从这些接口打印出事实。 有些服务器有其他接口,比如网桥,所以我不知道有哪些接口可以使用。 […]

authorizedible和Ansible中的with_items

我试图创build新的用户,并使用Ansible填充他们的〜/ .ssh / authorized_keys文件。 这是我的任务: – name: Create user account user: name="{{ item.username }}-ns" comment="{{ item.realname }}" groups=adm,sudo, append=yes password="{{ item.password }}" with_items: "{{ ssh_users }}" – name: copy ssh keys to authorized_keys authorized_key: user="{{ item.username }}-ns" key="{{ sshkey_path }}/{{ item.username }}.pub" with_item: "{{ ssh_users }}" 和我的variables文件看起来像这样: ssh_users: – username: "jdoe" realname: "jrow" password: "$6$FWhXrnkizCqwKJcM$y55ETlvthHA49NuzwYgKAmOTnsBDRzfXE1OiOuJ.HHwVuI4P/BQrR/eKgYOioevIrgYYw.HpeP/sxCR3M38SW/" […]

在make命令期间在CentOS 6.5上编译PHP 5.5.9时出错

这是错误消息: cc: internal compiler error: Killed (program cc1) Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions. make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1 处理的最后一件事是apprentice.lo,它似乎是image processing库的一部分(也许?)。 我正在使用Ansible来configuration我的实例。 这是一款数字海洋单核512MB虚拟机。 我一直在使用vagrant / ansible在本地开发相同的configuration,它已经编译好,这是我试图提供的第一个云虚拟机。 唯一的区别是我的DO服务器的基本映像来自DO和我的本地开发者,我通过VirtualBox从股票CentOS基本服务器安装来构build我自己的Vagrant框。 我把它从DropBox中拉下来。 这个问题已经被别人经历过,并被报告为一个php bug报告 我的php ansibleangular色的错误: — – name: Download php source get_url: url={{ php_source_url }} dest=/tmp register: get_url_result – […]

Ansible&rbash

我想pipe理一些运行/bin/rbash的设备作为/bin/rbash的默认shell。 问题是Ansible总是试图执行一个rbash根本不喜欢的命令列表: umask 77 && mkdir -p \"` echo ./ansible-tmp-1460362654.19-62671997084808 `\" && echo \"` echo ./ansible-tmp-1460362654.19-62671997084808 `\" 任何想法我怎么能避免这个命令? 澄清:我想更改Ansible使用的shell,并且只有一个用户可用。

Ansible / Capistrano用固定的sudo命令(“sudo su – ”)

我必须pipe理一些半pipe理的服务器(monstly CentOS 6),我们只允许以普通用户身份login,然后执行“sudo su – ”并键入常规用户密码,然后在根shell中运行命令。 我一直在寻找如何使用一些configurationpipe理工具(ansible,capistrano等)来做到这一点,但没有发现任何东西。 任何类似的情况下的经验? 我必须说,我们不能/允许更改允许的sudo命令,所以这些工具必须使用“sudo su – ”并运行相应的命令。 此外,我们不允许在机器上安装任何软件(是的,这是一个非常严格的客户端),所以所有的命令都必须使用ssh和passwordauthentication来运行。 提前感谢和感谢。