标签: ansible-playbook

Ansible:将命令的stdout存储在新变量中?

在我的剧本中,我想创建一个包含外部命令输出的变量.之后我想在几个模板中使用该变量.

以下是剧本的相关部分:

  tasks:
    - name: Create variable from command
      command: "echo Hello"
      register: command_output
    - debug: msg="{{command_output.stdout}}"

    - name: Copy test service
      template: src=../templates/test.service.j2 dest=/tmp/test.service
    - name: Enable test service
      shell: systemctl enable /tmp/test.service
    - name: Start test service
      shell: systemctl start test.service
Run Code Online (Sandbox Code Playgroud)

让我们说这是我的模板:

[Unit]
Description=MyApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "while true; do echo {{ string_to_echo }}; sleep 1; done"

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

(注意{{ …

ansible ansible-playbook

70
推荐指数
5
解决办法
12万
查看次数

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中,如何获取运行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:包括角色中的角色?

是否可以在角色中重用角色?我不是指通过在角色的meta/main.yml文件中定义依赖项,而是直接将角色包含在另一个角色的tasks/main.yml中?

例如,我在角色簿中定义了几个基本角色,在角色中定义了一些更高级别的角色.我希望高级角色除了某些特定任务外还包括一些基本角色.

playbooks/

  rolebooks/
    some_role/

  roles/
    webtier/
      tasks/
        main.yml
Run Code Online (Sandbox Code Playgroud)

在playbooks/roles/webtier/tasks/main.yml中:

- shell: echo 'hello'
- { role: rolebooks/some_role }
- shell: echo 'still busy'
Run Code Online (Sandbox Code Playgroud)

谢谢

ansible ansible-playbook

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

Ansible:如何在单独的保险库文件中加密库存文件中的某些变量?

设置

考虑类似于以下示例的Ansible清单文件:

[san_diego]
host1
host2

[san_francisco]
host3
host4

[west_coast]
san_diego
san_francisco

[west_coast:vars]
db_server=foo.example.com
db_host=5432
db_password=top secret password
Run Code Online (Sandbox Code Playgroud)

问题

我想db_passwordAnsible库中存储一些变量(例如),但不是整个文件.

如何将保险库加密的ansible文件导入未加密的库存文件?

我试过的

我创建了一个加密的vars文件,并尝试使用以下命令导入它:

include: secrets
Run Code Online (Sandbox Code Playgroud)

为了这ansible-playbook与回应:

ERROR: variables assigned to group must be in key=value form
Run Code Online (Sandbox Code Playgroud)

可能是因为它试图将include语句解析为变量.

encryption ansible ansible-playbook ansible-vault

62
推荐指数
4
解决办法
6万
查看次数

如何将相对于角色的ansible文件复制?

我在角色中有一个复制任务,我希望该src位置与角色本身相关,而不是调用角色的游戏手册.

我如何使这项工作和使用myfrole/files来自任务内部的文件myrole/tasks,我不想将角色名称包含在路径的一部分,因为它没有多大意义.如果我这样做,如果我复制角色会破坏.

ansible ansible-playbook

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

Ansible:使用sudo权限创建用户

我接管了一台Ubuntu 14.04服务器.它有一个名为"deployer"的用户(与capistrano一起使用),因此需要sudo权限.通过此设置,我可以登录服务器并执行以下操作:

workstation> ssh deployer@myserver
myserver>  sudo apt-get install git
myserver> exit
workstation>
Run Code Online (Sandbox Code Playgroud)

我试图找出如何使用Ansible(版本2.0.2.0和python 2.7.3)来创建一个名为"deployer"的用户,并能够使用该id登录到服务器然后sudo-ish之类的事情,如"apt --get install".我的剧本看起来像这样:

---
- hosts: example
  become: yes
  tasks:
  - name: Update apt cache
    apt:
      update_cache: yes
      cache_valid_time: 3600

  - group: name=sudo state=present

  - name: Add deployer user and add it to sudo
    user: name=deployer
          state=present
          createhome=yes
    become: yes
    become_method: "sudo"

  - name: Set up authorized keys for the deployer user
    authorized_key: user=deployer key="{{item}}"
    with_file:
      - /home/jaygodse/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

运行这个剧本之后,我能够以"deployer"的形式进入机器,(例如ssh deployer @ myserver)但是如果我运行sudo命令,它总是要求我输入我的sudo密码.

我理解"deployer"用户最终必须找到进入visudo用户文件的方式,但是我无法弄清楚要调用哪个神奇的Ansible咒语以便我可以作为部署者ssh进入机器然后运行sudo命令(例如sudo) apt-get install git")没有提示输入sudo密码. …

sudoers ansible-playbook

61
推荐指数
2
解决办法
8万
查看次数

Ansible Command模块说'|' 是非法的人物

我正在使用Ansible来部署我的项目,我试图检查是否安装了指定的包,但是我的任务有问题,这是任务:

- name: Check if python-apt is installed
  command: dpkg -l | grep python-apt
  register: python_apt_installed
  ignore_errors: True
Run Code Online (Sandbox Code Playgroud)

这是问题所在:

$ ansible-playbook -i hosts idempotent.yml

PLAY [lxc-host] *************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [10.0.3.240]

TASK: [idempotent | Check if python-apt is installed] ************************* 
failed: [10.0.3.240] => {"changed": true, "cmd": ["dpkg", "-l", "|", "grep", "python-apt"], "delta": "0:00:00.015524", "end": "2014-07-10 14:41:35.207971", "rc": 2, "start": "2014-07-10 14:41:35.192447"}
stderr: dpkg-query: error: package name in specifier '|' is illegal: must start with an alphanumeric character
...ignoring

PLAY …
Run Code Online (Sandbox Code Playgroud)

shell dpkg ansible ansible-playbook

56
推荐指数
2
解决办法
6万
查看次数

在playbook中修复错误后如何继续执行失败的任务?

在编写和调试Ansible playbooks时,典型的工作流程如下:

  1. ansible-playbook ./main.yaml
  2. Playbook在某些任务上失败了
  3. 修复此任务并重复第1行,等待所有先前的任务再次执行.这花费了很多时间

理想情况下,我希望在失败的任务上恢复执行,拥有库存以及之前任务收集的所有事实.它甚至可能吗?如何让剧本编写/调试更快?

ansible ansible-playbook

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