Questions tagged «ansible»

Ansible是用于配置和管理计算机的开源软件平台。它结合了多节点软件部署,临时任务执行和配置管理。

2
有没有办法检查ansible任务中未定义字典键?
所以在我的代码中,我有一个任务 - name: cool task shell: 'touch iamnotcool.txt' when: me.cool is not defined 我的var看起来像 --- me: stumped: yes 因此,当我运行任务时,它将返回以下错误 {"failed": true, "msg": "The conditional check 'me.cool' failed. The error was: error while evaluating conditional (me.cool): 'dict object' has no attribute 'cool'.

3
创建带有ansible和变量列表的符号链接
Ansible的全新功能-我正尝试将src目录中的一堆文件符号链接到目标。 file: src: /drupal/drush/{{ item.path }}.aliases.drushrc.php dest: /home/vagrant/.drush/{{ item.dest }}.aliases.drushrc.php with_items: - { path: 'new', dest: 'new' } - { path: 'vmdev', dest: 'vmdev' } state: link 我收到错误消息: fatal: [vmdev] => One or more undefined variables: 'item' is undefined 有人可以指出我正确的方向吗?干杯
17 ansible 



1
运行Ansible的pip模块时,如何在PATH前面添加?
我正在尝试使用Ansible的pip模块将psycopg2安装到Python virtualenv中,但是我需要在PATH前面添加一个条目才能正确构建(它需要知道包含的目录的路径pg_config)。我知道可以传递environment给该pip模块,但是我不确定如何添加而不是覆盖PATH。 在这里,我试图在路径前添加必要的目录,但是它将覆盖virtualenv PATH并失败: - pip: name: psycopg2 virtualenv: /path/to/my/venv environment: PATH: /usr/pgsql-9.3/bin:$PATH

5
ansible打印调试msg变量
我尝试mosh_version使用如下所示的ansible debug msg命令打印先前注册的变量: - name: Print mosh version debug: msg="Mosh Version: {{ mosh_version.stdout }}" 它不起作用,并显示以下错误: Note: The error may actually appear before this position: line 55, column 27 - name: Print mosh version debug: msg="Mosh Version: {{ mosh_version.stdout }}" ^ We could be wrong, but this one looks like it …


1
使用Ansible创建并挂载GlusterFS卷
我正在使用GlusterFS在4台计算机上创建和装载卷。比方说,该机器被称为machine1,machine2,machine3和machine4。 我的同伴已经被成功探测。 我已经使用以下命令来创建我的卷: sudo gluster volume create ssl replica 2 transport tcp machine1:/srv/gluster/ssl machine2:/srv/gluster/ssl machine3:/srv/gluster/ssl machine4:/srv/gluster/ssl force 然后,我从以下内容开始音量: sudo gluster volume start ssl 我已经/myproject/ssl使用以下命令挂载了目录: sudo mount -t glusterfs machine1:/ssl /myproject/ssl 当安装在每台计算机上时,一切都会按预期进行,并且/myproject/ssl目录具有在所有计算机上共享的数据。 问题是,在地球上我该怎么做? 这是我尝试以Ansible方式执行这两个命令的尝试: - name: Configure Gluster volume. gluster_volume: state: present name: "{{ gluster.brick_name }}" brick: "{{ gluster.brick_dir }}" replicas: …

2
如何使用Ansible顺序运行多个剧本?
我正在研究几本Ansible剧本,以启动一个新的服务器实例。为了成功启动服务器,我需要按照特定的顺序运行大约15种不同的剧本。 我最初的想法是编写一个shell脚本,该脚本执行ansible-playbook playbook_name.yml并为需要运行的每个剧本复制一个条目。 有没有更聪明/更好的方法来使用母版剧本来做到这一点,如果是的话,它会是什么样子(欣赏示例)。 我可以写一本完整的剧本,但有些剧本先以root身份运行,然后以sudo用户身份运行。

3
根据条件更改默认值
是否可以根据某些条件(例如,另一个变量的值)更改角色变量的默认值? 细节 我有两个与命令相关的变量,env和composer_opts。 如果两个都保留为默认值(env = "prod"和composer_opts = "--no-dev"),则一切正常。 如果更改env为dev,则另一个默认设置将破坏我的命令,因此我总是需要同时设置两者。是否可以通过使用自定义脚本/ if设置条件默认值来避免这种情况? 重要提示:我不想总是设置composer_opts根据该值env的价值。我只想设置尚未设置的值(即动态默认值)。 伪码 我想做这样的事情(以下代码无效,只是伪代码来表达我的需要) --- # defaults/main.yml env: prod composer_opts: when: "{{env}}" = 'prod' '--no-dev --optimize-autoloader --no-interaction' when: "{{env}}" = 'dev' ''
16 ansible 

3
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 现在,对于每个项目,都有一条包含该项目全部内容的巨大日志消息: 好的:[127.0.0.1] =>(项目= {u'uid':0,u'woth':False,u'mtime':1454939377.264,u'inode':400377,u'isgid':False,u' size':3243,u'roth':False,u'isuid':False,u'isreg':True,u'gid':0,u'ischr':False,u'wusr':True,u'xoth ':错,u'rusr':错,u'nlink':1,u'issock':错,u'rgrp':错,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,u' wgrp':错误,u'isfifo':False,u'mode':u'0600',u'islnk':False}) 这是难以理解的,因为我只想知道正在处理(并且可能已更改)的项目的路径。有了大量的按键,这种控制非常迅速。 我该如何以只item.path打印每个项目的方式更改此播放方式? 我已经尝试过了no_log: True,但这当然完全省略了输出。
16 ansible 

2
如何清除服务器上不再使用的角色中的内容?
假设我有一个主机,其中包括Web服务器,相关的Ansible角色将nginx在其中安装,在其中执行一些基本配置/etc/nginx,并在防火墙中打开端口80和443。 在某些时候,我希望该特定主机不再是Web服务器,因为出于某种原因,我将该服务移到了其他地方。仅从[webservers]清单中删除服务器会在服务器中留下垃圾。理想情况下,我想卸载nginx,删除/etc/nginx目录(和其他一些目录),并关闭防火墙中的端口80和443。 在Puppet中,我可以做到这一点。作为Web服务器的主机在其配置中将具有以下内容: class { 'nginx': ensure => present, } 我要做的就是用“缺席”代替“出席”。如果nginx该类写得很好,它将撤消其所做的更改。(通常,管理员将“ present”替换为“ absent”,稍后,当他确定所有受影响的主机都撤消了配置后,他将从清单中删除该项目。) 而且,我认为Puppet防火墙模块会自动删除清单中找不到的防火墙规则。因此,我认为,对于防火墙,您甚至不需要执行上面的“缺少”操作,防火墙将自动关闭。 我如何通过Ansible实现这些目标?
15 ansible 

4
Ansible用列表迭代字典
我通过加载以下变量include_vars: access: username-foo: - path: / permissions: rwX recursive: true username-bar: - path: / permissions: rX - path: /css permissions: rwX recursive: true - path: /data permissions: rX - path: /data/reviews.yml permissions: rw - path: /js permissions: rX - path: /js/*.js permissions: rw 我想将此信息提供给shell命令以设置适当的权限。 我从这里尝试了一些技术:http : //docs.ansible.com/playbooks_loops.html, 但未能提出有效的解决方案。 是否可以迭代此结构?如果没有,我如何重新组织它以使其正常工作?是否可以在不违反DRY规则的情况下做到这一点(例如,在每个记录中包括用户名)?
15 ansible 

2
如何使用Ansible从uri请求检查JSON响应?
我有一个Ansible任务,该任务向网站发出URI请求以获取JSON响应。如果嵌套的JSON变量已定义,我希望Ansible做某件事,如果未定义,则我想做其他事情。 - name: Get JSON from the Interwebs uri: url="http://whatever.com/jsonresponse" return_content=yes register: json_response - name: Write nested JSON variable to disk copy: content={{json_response.json.nested1.nested2}} dest="/tmp/foo.txt" 请注意,ignore_errors仅用于执行任务的命令失败,而不用于检查Jinja模板中嵌套数据结构中的未定义值。因此,如果json_response.json.nested1.nested2未定义,则尽管ignore_errors=yes已设置此任务仍将失败。 /tmp/foo.txt如果请求失败,或者请求没有定义正确的嵌套值,如何获取此Playbook的默认值?
15 ansible 

2
为什么Ansible没有存档模块?
谷歌搜索Ansible create tar不会产生任何好的结果,并且尽管有一个未归档的模块,但没有归档模块。 我可能会用 命令模块来,但是Ansible中的新功能使我想到我做错了什么。我敢肯定,我不是第一个需要将源代码上载到生产服务器的人。 那么为什么没有存档模块,社区如何处理此用例呢?
15 ansible 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.