标签: ansible

如何在不指定库存但直接主机的情况下运行Ansible?

我想在Python中运行Ansible而不通过(ANSIBLE_HOST)指定库存文件,但只是通过:

ansible.run.Runner(
  module_name='ping',
  host='www.google.com'
)
Run Code Online (Sandbox Code Playgroud)

我实际上可以轻松地在Fabric中执行此操作,但只是想知道如何在Python中执行此操作.另一方面,用于python的Ansible API的文档并不完整.

python ansible

67
推荐指数
4
解决办法
7万
查看次数

如何编写具有多个任务的Ansible处理程序?

为了响应更改,我有多个应该运行的相关任务.如何编写具有多个任务的Ansible处理程序?

例如,我想要一个仅在已经启动时重启服务的处理程序:

- name: Restart conditionally
  shell: check_is_started.sh
  register: result

- name: Restart conditionally step 2
  service: name=service state=restarted
  when: result
Run Code Online (Sandbox Code Playgroud)

handler ansible

66
推荐指数
3
解决办法
7万
查看次数

Ansible:按属性过滤列表

我在Ansible中注册了名为"network"的变量:

{
    "addresses": {
        "private_ext": [
            {
                "type": "fixed",
                "addr": "172.16.2.100"
            }
        ],
        "private_man": [
            {
                "type": "fixed",
                "addr": "172.16.1.100"
            },
            {
                "type": "floating",
                "addr": "10.90.80.10"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有可能获得类型="浮动"的IP地址("addr")做这样的事情?

- debug: var={{ network.addresses.private_man | filter type="fixed" | get "addr" }}
Run Code Online (Sandbox Code Playgroud)

我知道语法错了,但你明白了.

jinja2 ansible

66
推荐指数
3
解决办法
8万
查看次数

Ansible通知处理程序的另一个角色

我可以通过其他角色通知处理程序吗?我该怎么做让ansible找到它?

用例是,例如我想配置一些服务,然后在更改时重新启动它.不同的操作系统可能有不同的文件要编辑,甚至文件格式也可能不同.所以我想把它们放到不同的角色(因为文件格式可能不同,不能通过设置group_vars来完成).但重启服务的方式是相同的,使用service模块; 所以我想把处理程序放到common角色上.

无论如何要实现这一目标?谢谢.

ansible ansible-playbook

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

包括来自ansible playbook中另一个角色的任务

我正在设计一种具有单独任务的剧本库

所以在通常的角色回购中,我有类似的东西:

roles
??? common
?   ??? tasks
?       ??? A.yml
?       ??? B.yml
?       ??? C.yml
?       ??? D.yml
?       ??? login.yml
?       ??? logout.yml
?       ??? save.yml
??? custom_stuff_workflow
?   ??? tasks
?       ??? main.yml
??? other_stuff_workflow
    ??? tasks
        ??? main.yml
Run Code Online (Sandbox Code Playgroud)

我在custom_stuff_workflow中的main.yml包含如下内容:

---

- include: login.yml
- include: A.yml
- include: C.yml
- include: save.yml
- include: logout.yml
Run Code Online (Sandbox Code Playgroud)

而这个在另一个工作流程中:

---

- include: login.yml
- include: B.yml
- include: A.yml
- include: D.yml
- include: save.yml
- include: logout.yml …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

65
推荐指数
2
解决办法
5万
查看次数

如何在Ansible中获取任意远程用户的主目录?

我可以使用shell getentawk这样的组合来做到这一点:

getent passwd $user | awk -F: '{ print $6 }'
Run Code Online (Sandbox Code Playgroud)

作为参考,在Puppet中我可以使用自定义事实,如下所示:

require 'etc'

Etc.passwd { |user|

   Facter.add("home_#{user.name}") do
      setcode do
         user.dir
      end
   end

}
Run Code Online (Sandbox Code Playgroud)

这使得用户的主目录可用作home_<user name>事实.

如何获取任意远程用户的主目录?

ansible ansible-facts

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

SSH代理转发与Ansible

我正在使用Ansible 1.5.3和Git与ssh代理转发(https://help.github.com/articles/using-ssh-agent-forwarding).我可以登录到我使用Ansible管理的服务器并测试我与git的连接是否正确配置:

ubuntu@test:~$ ssh -T git@github.com
Hi gituser! You've successfully authenticated, but GitHub does not provide shell access.
Run Code Online (Sandbox Code Playgroud)

我也可以使用这个帐户克隆和更新我的一个repos,这样我的git配置看起来不错,当我直接通过ssh登录我的服务器时使用ssh转发.

问题:当我使用Ansible命令模块尝试上面显示的相同测试时.它以"Permission denied"失败.Ansible输出的一部分(详细日志记录)如下所示:

failed: [xxx.xxxxx.com] => {"changed": true, "cmd": ["ssh", "-T", "git@github.com"], "delta": "0:00:00.585481", "end": "2014-06-09 14:11:37.410907", "rc": 255, "start": "2014-06-09 14:11:36.825426"}
stderr: Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

这是运行此命令的简单playbook:

- hosts: webservers
  sudo: yes
  remote_user: ubuntu

  tasks:

  - name: Test that git ssh connection is working.
    command: ssh -T git@github.com
Run Code Online (Sandbox Code Playgroud)

问题:当我通过ssh手动登录并运行命令时,为什么一切正常,但是当同一个命令通过Ansible运行同一个命令时失败?

如果没有其他人打败我,我会很快发布答案.虽然我使用git来演示问题,但是任何依赖于ssh代理转发的模块都可能发生这种情况.它不是Ansible特有的,但我怀疑很多人会在这种情况下首先遇到问题.

git ssh ssh-agent ansible

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

在ansible中,如何获取运行ansible的用户名的变量?

我正在编写一个部署过程,该过程采用运行ansible脚本的用户名(例如tlau),并根据该用户名和当前日期/时间在远程系统上创建部署目录(例如tlau-deploy-2014-10 -15-16:52).

您可能认为这在ansible事实中可用(例如LOGNAME或SUDO_USER),但这些都设置为"root"或用于ssh到远程系统的部署ID.这些都不包含本地用户,即当前正在运行ansible进程的用户.

如何编写运行ansible进程的用户名并在我的playbook中使用它?

variables username ansible ansible-playbook

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

Ansible - 访问本地环境变量

我想知道Ansible是否有办法访问本地环境变量.

该文档引用了访问目标机器上的变量:

{{ lookup('env', 'SOMEVAR') }}
Run Code Online (Sandbox Code Playgroud)

有没有办法在源计算机上访问环境变量?

ansible

63
推荐指数
3
解决办法
6万
查看次数

Ansible - 模式755用于目录,644用于文件递归

我想允许任何人列出并读取目录树中的所有文件,但我不想让文件可执行:

dir
  \subdir1
      file1
  \subdir2
      file2
  ...
  \subdirX
      fileX
Run Code Online (Sandbox Code Playgroud)

以下任务使我的目录和文件可读,但它使所有文件也可执行:

- name: Make my directory tree readable
  file:
    path: dir
    mode: 0755
    recurse: yes
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我选择模式0644,那么我的所有文件都不可执行,但我无法列出我的目录.

是否可以为所有目录设置模式755,为目录树中的所有文件设置644?

谢谢.

file-permissions ansible

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