Articles of ansible

Ansible想要不必要文件的保险柜密码

在我的hosts文件中,我有GroupA和GroupB 。 group_vars/GroupB.ymlconfiguration包含一些敏感数据,因此我创build了group_vars/GroupB.yml并使用Ansible Vaultencryption。 我有一个剧本与hosts: GroupA 。 当我运行剧本时,Ansible失败,因为我没有提供group_vars/GroupB.yml的密码。 但GroupB从来没有在任何地方被调用,那么为什么它会试图解密该文件? 我可能会忽略或误解什么?或者这实际上是预期的行为?

Ansible其实来自另一个主机

我试图从我另一个主持人那里得到一个事实: – hosts: localhost tasks: – site_facts: name={{ var }} – hosts: "{{ apphost }}" tasks: – shell: command: docker inspect –format='\{\{.Image\}\}' {{ dbname }} register: imagehash – hosts: some_host tasks: – debug: var=hostvars[apphost].inventory_hostname – debug: var=hostvars['localhost'].inventory_hostname 棘手的部分是'apphost'variables,通过–extra-vars传递,包含ec2上主机的标签名称。 然而hostvars列表使用ip adrress作为关键,所以我得到这个错误: fatal: [192.168.XX.XX] => Failed to template {{hostvars[apphost].inventory_hostname}}: host not found: tag_Name_docker1 任何想法,我应该如何从这个主机得到事实?

如何使用Ansiblepipe理软件包更新?

我想使用Ansible将软件包更新推出到我的机器上。 但是我想先在本地虚拟机上testing这些更新。 这通常在现实世界中如何实现? 我是否将Ansibleconfiguration中的每个重要软件包“locking”到特定版本,然后testing每个更新? 我是否会定期获取可升级软件包的列表,并在我的vms上同时更新所有软件包,然后在我的服务器上进行更新? 我可能会有一些麻烦保持我的服务器和vms同步。 有pipe理更新的最佳做法吗?

Ansible为每个运行时对象生成任务

我想让Ansible为运行时发现的某个对象运行一个任务。 例如,指定目录中的每个文件一个,或者每个正在运行的进程一个。 有没有办法在task / playbook里面实现这个? 我希望将结果作为一项任务集成到正常输出中,理想情况下是调整后的任务和“注册”variables名称。 不幸的是,我能find的所有例子都是静态定义。

Ansible中Puppetboard的等价物是什么?

我希望对集群中所有节点的所有事实进行一个概述,这些事实都可以像Puppetboard那样为所有使用Puppet

将一个variables从一个包含到另一个包含Ansible的手册

比方说,我想要一些从命令行转换到剧本的variables,然后是另一个(包括)剧本,那么最简单的方法是什么? 我想我会这样? [me@my_box]$ ansible-playbook -i foo -e "server_farm=qa2" playbooks/main_pb.yaml 现在,让我们说,在我的主要手册中,我想把server_farmvariables传递给一个包含的playbook,我会这样吗? — # playbook: main_pb.yaml [some stuff] tasks: – include subtasks/init_services.yaml {{ server_farm }} 如何在init_services.yaml中使用这个variables? 我会像: — # playbook: init_services.yaml [some stuff] – name: start some_service [some start service stuff] when: server_farm == "qa2" 我有这个对吗? 如果是这样,是最干净的方式去呢? – 杰夫(正如你可能已经猜到的那样,我正在和Ansible在一起,我有很多潜力)

Ansible通过with_items在数组中实际累积字典

我有以下任务(和debugging任务): – name: get list of error logs set_fact: centralised_logs: "{{ centralised_logs | default([]) | union([{'name': '{{ item }} error log'}])}}" with_items: – "one" – "two" – "three" – debug: msg="{{ centralised_logs }}" 我期望centralised_logs的事实是在union语句中累积一个包含插入string的字典数组,但是我得到了下面的内容(注意它适用于第二和第三项,但不是第一项): TASK [nginx : get list of error logs] ****************************************** ok: [127.0.0.1] => (item=one) ok: [127.0.0.1] => (item=two) ok: [127.0.0.1] => (item=three) […]

Ansiblevariables未定义,除非设置为默认值

我正在试图添加一个新的variables到一个现有的充分的Ansible文件,大量使用angular色的git仓库。 所以,无论哪里foo被引用,在下面 vars_files: – vars/aws.yml – vars/aws-credentials.yml 我已经添加了新的一行 – vars/rpm-repo.yml 我创build了内容为vars/rpm-repo.yml : — yum_rpm_dir: https://example.com/repo/noarch 这个YAML是根据这个答案给出的命令来检查一个文件是否是有效的YAML。 而在roles/foo/tasks/main.yml我已经改变了一个yum任务来安装这个: name: "{{ yum_rpm_dir }}/rest-api-{{ rest_api_version }}-1.noarch.rpm" (这个明确的URL的目的是解决我们RPM存储库中的一个错误。) 但是我得到: fatal: [1.2.3.4]: FAILED! => {"failed": true, "msg": "'yum_rpm_dir' is undefined"} 所以我想,显然我还没有理解variables如何与Ansible中的angular色交互的复杂性,所以我将它添加为默认值,并且肯定会起作用。 所以我把上面的文件复制到了roles/foo/defaults/main.yml中。 这工作,但它是一个黑客。 把它变成一个variables的重点是它的价值可以被多个angular色使用而不被复制和粘贴。 tl; dr:如何正确设置Ansible中的一个variables,以便它可以被angular色接收?

Ansible不支付注意'group'在CentOS 7上分配用户的主要群组

我正在运行Ansible 2.2.0.0,在CentOS 7服务器上创build用户,具体如下: – name: User creation user: name="{{item.username}}" group="{{item.username if users_create_per_user_group else item.group}}" groups="{{item.groups | join(',')}}" shell="{{item.shell if item.shell is defined else users_default_shell}}" comment="{{item.name}}" uid="{{item.uid}}" home="{{item.home if item.home is defined else []}}" password="{{ item.password if item.password is defined else '!' }}" with_items: "{{users}}" tags: ['users','configuration'] 我将“wordpress”分配给“primary_group”(以便内容开发人员可以在wordpress区域中读写,而不必担心chgrp文件),我发现variables在playbook输出中正确分配: ok: [someserver] => (item={u'username': u'someuser', **u'group': [u'wordpress']**, u'name': […]

如何与团队共享Ansible部署用户密钥

我正在开发一个Ansible操作手册来自动化我们的服务器configuration,但是我碰到了一块硬砖墙,我不知道该如何处理。 在我的本地系统上,我生成了一个在我的远程主机上使用的SSH密钥对。 然后我手动在远程主机上build立一个有用的用户,并将我的无用的公钥复制给他们。 现在,Ansible可以使用我的远程主机无需密码进行身份validation。 完善。 我的问题是,这个剧本将被存储在一个Git仓库,并在团队之间共享。 如果团队中的某个人对剧本进行了修改,并且想要对着我们的远程主机运行,那么他们将无法访问,因为他们没有“远程”用户的私钥。 处理这种情况的正确方法是什么?