标签: ansible-playbook

安全地将Ansible剧本限制在一台机器上?

我正在使用Ansible进行一些简单的用户管理任务和一小组计算机.目前,我将我的手册设置为hosts: all,我的主机文件只是一个列出了所有机器的组:

# file: hosts
[office]
imac-1.local
imac-2.local
imac-3.local
Run Code Online (Sandbox Code Playgroud)

我发现自己经常不得不针对一台机器.该ansible-playbook命令可以限制这样的播放:

ansible-playbook --limit imac-2.local user.yml
Run Code Online (Sandbox Code Playgroud)

但这似乎有点脆弱,特别是对于潜在的破坏性剧本.离开limit旗帜意味着剧本将在任何地方运行.由于这些工具偶尔会被使用,所以似乎值得采取措施来简化播放,因此我们不会在几个月后意外地进行核实操作.

是否有将playbook运行限制为单台机器的最佳实践?理想情况下,如果省略一些重要细节,剧本应该是无害的.

ansible ansible-playbook

207
推荐指数
11
解决办法
19万
查看次数

如何在命令行中将变量传递给ansible playbook?

我是ansible的新手并且想知道如何这样做,因为以下不起作用

ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"
Run Code Online (Sandbox Code Playgroud)

django_fixtures我的变量在哪里?

variables command-line command-line-arguments ansible ansible-playbook

189
推荐指数
10
解决办法
26万
查看次数

Ansible失败了/ bin/sh:1:/ usr/bin/python:找不到

我遇到了一个我以前从未见过的错误.这是命令和错误:

$ ansible-playbook create_api.yml

PLAY [straw] ******************************************************************

GATHERING FACTS ***************************************************************
failed: [104.55.47.224] => {"failed": true, "parsed": false}
/bin/sh: 1: /usr/bin/python: not found


TASK: [typical | install required system packages] *****************************
FATAL: no hosts matched or all hosts have already failed -- aborting


PLAY RECAP ********************************************************************
           to retry, use: --limit @/Users/john/create_api.retry

104.55.47.224               : ok=0    changed=0    unreachable=0    failed=1
Run Code Online (Sandbox Code Playgroud)

这是create_api.yml文件:

---

- hosts: api
  remote_user: root
  roles:
    - api
Run Code Online (Sandbox Code Playgroud)

这是hosts文件:

[api]
104.55.47.224
Run Code Online (Sandbox Code Playgroud)

我可以删除角色部分,它不会进入第一个任务,它将使它只会使它成为行/bin/sh: 1: /usr/bin/python: not found.这可能会发生什么?


注意:如果有人正在ping IP地址并且没有得到响应,您应该知道自从粘贴代码后我已经更改了IP地址.

编辑 …

ansible ansible-playbook

184
推荐指数
10
解决办法
7万
查看次数

你如何阻止Ansible在主目录中创建.retry文件?

当Ansible在对主机运行播放时遇到问题时,它会将主机名输出到用户主目录中以'.retry'结尾的文件中.这些通常不使用,只是导致混乱,有没有办法将它们关闭或放在不同的目录?

ansible ansible-playbook devops

144
推荐指数
3
解决办法
4万
查看次数

如何自动安装Ansible Galaxy角色?

所有我的Ansible剧本/角色都签入我的git仓库.

但是,对于Ansible Galaxy角色,我总是必须在我想运行Ansible的每台机器上逐个明确地下载它们.

在Ansible抱怨在运行时缺少角色之前,确切地知道确切需要哪些Ansible Galaxy角色甚至是很难的.

如何管理Ansible Galaxy角色依赖项?我想让他们检查我的git repo以及其余的ansible代码,或者在我在新机器上运行Ansible时自动识别和下载它们.

ansible ansible-playbook ansible-galaxy

113
推荐指数
6
解决办法
5万
查看次数

如何在ansible中定义变量时运行任务?

当ansible变量不是寄存器/未定义时,我正在寻找一种执行任务的方法,例如

-- name: some task
   command:  sed -n '5p' "{{app.dirs.includes}}/BUILD.info" | awk '{print  $2}'
   when: (! deployed_revision) AND ( !deployed_revision.stdout )
   register: deployed_revision
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

99
推荐指数
3
解决办法
15万
查看次数

将变量写入Ansible中的文件

我通过URI模块提取JSON,并希望将收到的内容写入文件.我能够获取内容并将其输出到调试器,因此我知道已收到内容,但我不知道编写文件的最佳做法.

file ansible-playbook

91
推荐指数
3
解决办法
10万
查看次数

Ansible Playbooks vs Roles

根据Ansible文档,Playbook 是:

...真正简单的配置管理和多机器部署系统的基础,与已有的系统不同,非常适合部署复杂的应用程序.

而且,根据那些相同的文档,角色 是:

...基于已知文件结构自动加载某些vars_files,任务和处理程序的方法.按角色对内容进行分组还可以轻松与其他用户共享角色.

但是,这些与不同用例之间的区别对我来说并不是很明显.例如,如果我将我的/etc/ansible/hosts文件配置为:

[databases]
mydb01.example.org
mydb02.example.org

[mail_servers]
mymail01.example.org
mymail_dr.example.org
Run Code Online (Sandbox Code Playgroud)

......那么这个" [databases]"条目是什么......一个角色?或者某个剧本YAML文件的名称?或者是其他东西?!?

如果有人可以向我解释这些差异,我对Ansible的理解会大大提升!

  • Playbook vs Role vs [databases]和类似的条目/etc/ansible/hosts
  • 如果在YAML文件中定义了Playbooks,那么角色定义在哪里?
  • 除了ansible.cfgAnsible服务器上的生活,如何使用可用的Playbooks/Roles添加/配置Ansible?例如,当我跑步时ansible-playbook someplaybook.yaml,Ansible如何知道在哪里找到该剧本?

ansible ansible-playbook

87
推荐指数
4
解决办法
5万
查看次数

从命令行覆盖Ansible playbook的hosts变量

这是我正在使用的剧本片段(server.yml):

- name: Determine Remote User
  hosts: web
  gather_facts: false
  roles:
    - { role: remote-user, tags: [remote-user, always] }
Run Code Online (Sandbox Code Playgroud)

我的主机文件有不同的服务器组,例如

[web]
x.x.x.x

[droplets]
x.x.x.x
Run Code Online (Sandbox Code Playgroud)

现在我想执行ansible-playbook -i hosts/<env> server.yml,并覆盖hosts: webserver.yml运行这个剧本的[droplets].

我可以直接覆盖一次性的东西,而不server.yml直接编辑吗?

谢谢.

ansible ansible-playbook

87
推荐指数
8
解决办法
9万
查看次数

Ansible:将变量设置为文件内容

我正在使用ec2模块,ansible-playbook我想将变量设置为文件的内容.这是我目前正在做的事情.

  1. Var用文件名
  2. shell任务到cat文件
  3. 使用cat传递给ec2模块的结果.

我的剧本的示例内容.

vars:
  amazon_linux_ami: "ami-fb8e9292"
  user_data_file: "base-ami-userdata.sh"
tasks:
- name: user_data_contents
  shell: cat {{ user_data_file }}
  register: user_data_action
- name: launch ec2-instance
  local_action:
...
  user_data: "{{ user_data_action.stdout }}"
Run Code Online (Sandbox Code Playgroud)

我假设有一个更简单的方法来做到这一点,但我在搜索Ansible文档时找不到它.

ansible ansible-playbook

80
推荐指数
3
解决办法
9万
查看次数