Articles of ansible

可靠的with_items不会打印整个项目

我自动保护这样的ssl键: – name: Find ssl keys find: paths="/etc/ssl/" patterns="*.key" recurse=yes register: secure_ssl_keys_result – name: Secure ssl keys file: path={{ item.path }} user=root group=root mode=600 with_items: secure_ssl_keys_result.files 现在,对于每一个项目,都有一个巨大的日志消息与项目的全部内容: OK:[127.0.0.1] =>(item = {u'uid':0,u'woth':False,u'mtime':1454939377.264,u'inode':400377,u'isgid':False,大小':3243,'你好':假的,你是'假':假,你好':0,你好':假,你好':真的,你好, ':假的,u'rusr':真的,u'nlink':1,u'issock':False,u'rgrp':False,u'path':u'/ etc / ssl / foo.key',u 'xusr':False,u'atime':1454939377.264,u'isdir':False,u'ctime':1454939657.116,u'isblk':False,u'xgrp':False,u'dev':65025, wgrp':False,u'isfifo':False,u'mode':u'0600',u'islnk':False}) 这是难以置信的不可读的,因为我只想知道正在处理(也许改变)的项目的path。 随着大量的钥匙,这个得到失控非常快。 我怎样才能改变这种打法,只有item.path正在打印​​出每个项目? 我已经尝试了no_log: True ,但是这完全忽略了课程的输出。

Ansible游戏手册中的关联数组

我正在尝试使用Ansible将用户添加到我的服务器。 每个用户都有不同的encryption密码。 我有这样的事情: vars: users: – myuser1 – myuser2 password: encryptedpasswordhere tasks: – name: Creating users user: name={{ item }} password={{ password }} groups=sudo,adm shell=/bin/bash with_items: users 这个工作很好,但所有的用户都有相同的密码。 我正在寻找一个关联数组。 在PHP中,我会这样做: $users = array('user'=>'myuser1', 'password'=>'encryptedpass1', 'user'=>'myuser2', 'password'=>'encryptedpass2', ); 有一种方法可以在Ansible手册中做到这一点?

如何将用户添加到Ansible中的多个组?

我不能将用户添加到多个组,我不断收到消息:此模块需要key = value参数。 这是我想要的一段代码: – name: make a new user user: name=user state=present groups="group1", "group2", "group3" comment="comment" 该文档说:组= =用户在这个逗号分隔的组列表。 当设置为空string('groups =')时,用户将从除主组以外的所有组中移除。 我尝试过“群”,“群”,没有冒号,仍然得到同样的错误。 http://docs.ansible.com/user_module.html

我怎样才能有一个fileglob模式的嵌套循环?

我正在尝试为Ansible中的一组用户创build一组授权的SSH密钥。 我有一个usersvariables设置如下所示: users: – { username: root, name: 'root' } – { username: user, name: 'User' } 在同一个angular色中,我还在files/public_keys目录中有一组授权密钥文件,每个授权密钥有一个文件: roles/common/files/public_keys/home roles/common/files/public_keys/work 我想将每个公钥复制到每个用户。 我已经尝试使用以下任务: – name: copy authorized keys authorized_key: user={{ item.0.username }} key={{ item.1 }} with_nested: – users – lookup('fileglob', 'public_keys/*') 但是, item.1包含文本string"lookup('fileglob', 'public_keys/*')" ,而不是files/public_keys下的每个文件path。 有没有一种方法可以得到files/public_keys目录的清单,并将每个公钥复制到每个用户?

如何encryptionAnsible中的二进制文件?

我们正在使用Ansible Vault在我们的Ansible Playbook git存储库中存储密码,证书的私钥等。 我们现有的所有私人数据都是文本forms的,所以我们可以将其存储在variables中。 然后将这些文件用于模板或复制模块的content参数。 现在,我们有一个Java KeyStore文件,可悲的是有一个二进制格式。 因此,它不能存储在一个variables – 或者至less我不知道如何去做。 什么是最简单的方法,让我们的文件在git中正确encryption,但在运行ansible-playbook时可用? 我已经尝试过没有成功: 在base64中编码二进制文件,将编码的数据存储在variables中,并使用模板模块{{base64_data | b64decode}} {{base64_data | b64decode}} 。 在结果文件的hex转储中导致大量EF BF BD 。 这三个字节以UTF-8编码Unicodereplace字符,所以将二进制数据解释为文本存在问题。 在base64中编码二进制文件,将编码数据存储在variables中,并使用content="{{base64_data | b64decode}}"的复制模块。 Ansible抱怨:“一个variables插入一个新的参数到模块的参数。” 当使用单引号而不是双引号时,Ansible抱怨“错误parsing参数string”,以及所有二进制数据的副本,转储到terminal…

我如何避免显示跳过Ansible任务?

我的剧本的输出总是被无用的输出所完全淹没,哪些任务被跳过了,这使得烦人和耗费时间去查找我正在寻找的特定信息。 这是一个剧本的例子 – name: Stopping Puppet Agent service: name=pe-puppet state=stopped ignore_errors: true register: result – include: rollback/restart-pe-puppet.yml when: result|failed 和相关的输出: TASK: [name | Stopping Puppet Agent] ************************************** <server.name> REMOTE_MODULE service name=pe-puppet state=stopped changed: [server.name] => {"changed": true, "name": "pe-puppet", "state":"stopped"} TASK: [name | judge_log msg='Restarting pe-puppet'] *********************** skipping: [server.name] TASK: [name | starting pe-puppet] ***************************************** […]

在每个环境中configurationSSH凭据

我试图找出如何分别configuration与Ansible生产和分期环境的SSH凭据。 我知道你可以通过将-i或–inventory-fileparameter passing给–inventory-file ansible-playbook命令来分别使用不同的库存文件来configuration服务器IP地址和主机名。 但是,我没有看到ansible.cfg这样的选项。 目前,凭证位于/etc/ansible/ansible.cfg如下所示: [defaults] private_key_file=/home/caleb/.ssh/staging_key.pem remote_user=ubuntu sudo_user=root gathering=explicit 我如何configuration多个SSH凭证,一个用于生产,一个用于分段?

在Ansible中,Puppet的“除非”是什么?

背景:在Puppet中可以执行一个命令, 除非它已经被执行: exec { '/bin/echo root >> /usr/lib/cron/cron.allow': path => '/usr/bin:/usr/sbin:/bin', unless => 'grep root /usr/lib/cron/cron.allow 2>/dev/null', } 目标:执行一个命令,除非已经在Ansible中运行 方法 任务/ main.yml – name: add vhost sensu command: rabbitmqctl add_vhost /sensu 结果 TASK [ansible-rabbitmq : add vhost sensu] ************************************** fatal: [111.222.333.444]: FAILED! => {"changed": true, "cmd": ["rabbitmqctl", "add_vhost", "/sensu"], "delta": "0:00:00.210140", "end": "2016-07-29 12:55:19.384455", "failed": […]

ansible:为什么文件模块跳过?

我有一个可靠的1.1的手册,我做这样的事情: – name: copy files sudo: True shell: cp /from/* /to/ – name: change owner sudo: True file: path=$item owner=newuser group=newgroup with_fileglob: /to/* 第二个任务,“换主人”总是跳过。 谁能帮我找出原因? 文件模块是否因文件存在而跳过? 我卡住了:)

使用complex-argsforms将自由格式的命令传递给Ansible

我正在使用编程方式生成Ansible的手册。 一般来说,因为剧本只是YAML,所以这很简单。 但是,当使用“简单” key=valueforms时,剧本不是纯粹的YAML – 它们包含embeddedshlex -parsableforms的内容。 为了避免这种forms的歧义(是key=value对命令的一个参数或ansible的参数),并且只有一种格式来parsing和生成,我无条件地使用示例演示的复杂的参数机制在例句库中 。 这使用以下types的语法: action: module-name args: key1: value1 key2: value2 …这是好的,好的。 但是,当试图使用这种forms的shell或command模块( 其文档将实际的命令描述为在名为free_form的参数中free_form )时,这并不是很好: action: shell args: free_form: echo hello_world >/tmp/something creates: /tmp/something 当被调用时,这将运行以下内容: /bin/sh -c " free_form='echo hello_world >/tmp/something' " …这是非常不是我想要完成的。 使用纯YAML语法的“自由格式”命令使用Ansible模块的正确方法是什么?