标签: ansible

如何在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中检查文件?

我必须检查文件是否存在/etc/.如果该文件存在,那么我必须跳过该任务.这是我正在使用的代码:

- name: checking the file exists
  command: touch file.txt
  when: $(! -s /etc/file.txt)
Run Code Online (Sandbox Code Playgroud)

如果file.txt存在则我必须跳过任务.

ansible

96
推荐指数
5
解决办法
14万
查看次数

如何在Ansible中做多行shell脚本

现在我在ansible中使用一个shell脚本,如果它在多行上会更加可读

- name: iterate user groups
  shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
  with_items: "{{ users }}"
Run Code Online (Sandbox Code Playgroud)

只是不确定如何在Ansible shell模块中允许多行脚本

shell ansible

96
推荐指数
4
解决办法
8万
查看次数

使用Ansible创建新用户和密码

我有一个ansible任务,在ubuntu 12.04上创建一个新用户;

- name: Add deployment user
    action: user name=deployer password=mypassword
Run Code Online (Sandbox Code Playgroud)

它按预期完成,但当我以该用户身份登录并尝试使用我设置的密码sudo时,它总是说它不正确.我究竟做错了什么?

bash shell ubuntu ansible

92
推荐指数
7
解决办法
16万
查看次数

变量是否具有正在执行的当前ansible-playbook的路径?

是否有一个ansible变量,它具有正在执行的当前ansible-playbook的绝对路径?

一些上下文: 我正在运行/创建一个ansible脚本localhost来配置一个mysql docker并希望相对于ansible脚本挂载数据卷.

例如,假设我已经将存储库签出~/branch1/,然后运行ansible-playbook dev.yml我认为它应该将卷保存到~/branch1/.docker_volume/.如果我~/branch2从那时开始运行它应该将卷配置为~/branch2/.docker_volume/.

ansible

89
推荐指数
2
解决办法
10万
查看次数

仅当主机不属于组时才运行任务

只有当前剧本的主持人不属于某个组时,我才能运行一个ansible任务.在半伪代码中:

- name: my command
  command: echo stuff
  when: "if {{ ansible_hostname }} not in {{ ansible_current_groups }}"
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

ansible

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

如何获取ansible-playbook模块执行的日志/详细信息?

假设我执行以下操作.

$ cat test.sh
#!/bin/bash
echo Hello World
exit 0

$ cat Hello.yml
---

- hosts: MyTestHost
  tasks:
  - name: Hello yourself
    script: test.sh


$ ansible-playbook  Hello.yml

PLAY [MyTestHost] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [MyTestHost]

TASK: [Hello yourself] ********************************************************
ok: [MyTestHost]

PLAY RECAP ********************************************************************
MyTestHost                    : ok=2    changed=0    unreachable=0    failed=0

$
Run Code Online (Sandbox Code Playgroud)

我确信它是成功的.

在远程主机(MyTestHost)上我的脚本在哪里/如何看到"Hello World"回显/打印?还是脚本的返回/退出代码?

我的研究表明,我可以编写一个插件来拦截模块执行回调或者那些行上的东西并编写一个日志文件.我宁愿不浪费我的时间.

例如下面的stdout(注意我运行的是ansible而不是ansible-playbook):

$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh
plabb54 | success >> {
    "rc": 0,
    "stderr": "",
    "stdout": "Hello World\n"
}

$
Run Code Online (Sandbox Code Playgroud)

logging ansible

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

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在两个节点之间复制文件

我需要将文件格式机A复制到机器B,而我运行所有安全任务的控制机器是机器C(本地机器)

我尝试过以下方法:

在ansible的shell模块中使用scp命令

hosts: machine2
user: user2
tasks:
  - name: Copy file from machine1 to machine2 
    shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1
Run Code Online (Sandbox Code Playgroud)

这种方法一直持续下去.

使用获取和复制模块

hosts: machine1
user: user1
tasks:
  - name: copy file from machine1 to local
    fetch: src=/path-of-file/file1 dest=/path-of-file/file1

hosts: machine2
user: user2
tasks:
  - name: copy file from local to machine2
    copy: src=/path-of-file/file1 dest=/path-of-file/file1
Run Code Online (Sandbox Code Playgroud)

这种方法给我一个错误如下:

error while accessing the file /Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>, error was: [Errno 102] Operation not supported on socket: u'/Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>'
Run Code Online (Sandbox Code Playgroud)

任何的意见都将会有帮助.

ansible

86
推荐指数
3
解决办法
11万
查看次数

标签 统计

ansible ×10

ansible-playbook ×3

shell ×2

bash ×1

logging ×1

ubuntu ×1