标签: ansible

Ansible:如何递归设置目录和文件权限

在ansible中,我可以这样做:

file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes
Run Code Online (Sandbox Code Playgroud)

并且它递归地将该路径中的所有目录和文件的所有者、组和权限设置为 0775。但是我想将目录设置为 0775,将文件设置为 0664。有什么方法可以让 ansible 做到这一点?

file-permissions ansible

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

Ansible 任务报告某些内容发生了变化有什么意义?

我有一个任务来检查我的进程是否正在侦听端口 8080,并且只有当退出代码不为零时,我才会运行fail一条消息。

当服务运行时,它报告状态已更改。我要它说okchangedAnsible中的状态实际上意味着什么?

ansible

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

Ansible 确定操作系统

作为我的部署脚本的一部分,我想检查我要部署到哪个操作系统。我使用过ansible localhost -m setup并且正如他们在文档中所说的那样输出很多。有没有办法可以访问我正在使用的 ubuntu 发行版?理想情况下,我想找到盒子是运行 Trusty 还是 Precise

ubuntu ansible

18
推荐指数
1
解决办法
1万
查看次数

如何为 Ansible 中的所有主机设置默认 ssh 用户?

Ansible 2.1 版

我有一个库存文件 hosts

[nodes]
host1
host2
...
Run Code Online (Sandbox Code Playgroud)

和一个简单的剧本 site.yml

---
- hosts: all
  tasks:
    - include: tasks/main.yml
Run Code Online (Sandbox Code Playgroud)

如果我刚开始玩

ansible-playbook -i hosts site.yml -vvvv
Run Code Online (Sandbox Code Playgroud)

我收到所有主机的这个错误,

ESTABLISH SSH CONNECTION FOR USER: None
fatal: [host1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
...
Run Code Online (Sandbox Code Playgroud)

然而,阅读Ansible Inventory文档,我添加ansible_userhosts文件中,

[nodes]
host1    ansible_user=root
host2    ansible_user=root
...
Run Code Online (Sandbox Code Playgroud)

这解决了SSH CONNECTION UNREACHABLE错误。但是,我必须ansible_user=root在所有主机旁边添加吗?或者有没有更简单的方法来做到这一点?

ansible

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

在 Mac OS X 上的“/etc/ansible/”中找不到配置文件

我使用的是 Mac OS X 并且是Ansible 的新手。我忘记了我是如何安装它的。我认为通过pip

$ pip freeze
altgraph==0.12
ansible==1.9.2
Run Code Online (Sandbox Code Playgroud)

无论如何,从我正在阅读/etc/ansible/的内容来看, 中应该有一个配置文件,但该目录的内容只是:

$ ls -a /etc/ansible/
.       ..      .hosts.swp  hosts       roles
Run Code Online (Sandbox Code Playgroud)

看起来也没有定义环境变量:

$ echo $ANSIBLE_CONFIG
# blank line
Run Code Online (Sandbox Code Playgroud)

据我所知,Ansible 可以正常工作(没有 local ansible.cfg,并且ansible用户目录中的文件夹中没有任何内容),但我很困惑。

有人可以解释一下我没有得到什么吗?

ansible macos

17
推荐指数
3
解决办法
5万
查看次数

如何在 Ansible 中计算数组中的元素数量?

在 Ansible 中从 shell 命令输出生成一个数组,类似于以下内容:

foo: [value0, value1, value2, value3]
Run Code Online (Sandbox Code Playgroud)

现在,根据 shell 命令的输出, 的元素数量foo可能会有所不同。

然后我生成一个 jinja2 模板来显示:

foo[0] will return value0
foo[1] will return value1
...
Run Code Online (Sandbox Code Playgroud)

我如何确定存储了多少元素foo

array ansible

13
推荐指数
1
解决办法
5万
查看次数

在 Ansible 中以分离模式运行远程脚本/应用程序

我无法从 Ansible 剧本“分离地”运行远程应用程序启动脚本。脚本将运行,但我无法让它获得/保持分离。我可能做错了什么,但什么?

这是我的复制器。

  1. 我在 Test.java 中的远程 Java 应用程序运行了 10 秒:

    class Test {
        public static void main(String[] args) {
            for (int I = 1; I <= 10; i++) {
                System.out.println("Hello world " + I);
    
                try { Thread.sleep(1000);
                } catch (Exception e) { System.out.println("Exception caught: " + e);
                }
    } } }
    
    Run Code Online (Sandbox Code Playgroud)

将其编译为 Test.class (javac Test.java),然后使用“java Test”运行该类按预期工作(给出 10 条输出消息,然后退出)。

  1. 我运行此应用程序的可执行 shell 脚本(如在 chmod 755 中)如下所示:

    #!/bin/bash
    java Test &
    
    Run Code Online (Sandbox Code Playgroud)

手动运行它也完全没问题:Java 应用程序在我的控制台中运行并生成相同的标准输出,但 shell 脚本已经退出,我重新控制了我的 bash 会话。

  1. 现在通过来自另一台服务器的 ansible playbook 运行它。我尝试以不同的方式使用“command”模块和“shell”模块,但无济于事......

    --- …
    Run Code Online (Sandbox Code Playgroud)

script bash ansible

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

Ansible playbook 确定操作系统版本

我只是想检查我所有服务器上的 ubuntu 版本。基于这个问题,我看到 ansible 有一个,ansible_distribution_version但这个剧本没有显示我如何简单地打印出 ubuntu 版本,即 ubuntu 14.04、16.04 等

ansible

12
推荐指数
1
解决办法
4万
查看次数

确认进程是否正在运行的 Ansible 任务

2.1 版

在剧本中,我开始了一个过程:

- name: Start Automation Agent, and enable start on boot
  service: name=mongodb-mms-automation-agent state=started enabled=yes
Run Code Online (Sandbox Code Playgroud)

从播放回顾来看,该过程似乎已成功启动。

TASK [install : Start automation agent, and enable start on boot] **************
changed: [server1]
Run Code Online (Sandbox Code Playgroud)

但是,当登录到远程主机并执行 a 时ps,该进程并未运行。检查进程日志它没有通过一些先决条件(预期)。

如何在剧本中编写任务以确认流程已成功启动?

ansible

11
推荐指数
2
解决办法
7万
查看次数

Ansible 命令任务遇到“Exec 格式错误”

我编写了这个 ansible 任务来在远程流浪盒上运行一个进程。(嗯,实际上 ansible 文件本身要长得多,但这是一个运行启动脚本的复制器。)

---
- hosts: myappname_server
  vars_files:
    - install_myappname_vars.yaml
  gather_facts: false
  sudo: true
  sudo_user: "{{ project_name }}"

  tasks:
  - name: Restart application
    command: "{{ project_target_dir_env }}/run"
    args:
      chdir: "{{ project_target_dir_env }}"
Run Code Online (Sandbox Code Playgroud)

它适用于包含的 vars 文件中的这些 vars:

---
project_name: myappname
project_source_dir_files: files/myappname
project_source_dir_env: "{{ project_source_dir_files }}/environment_files"
project_target_root: /home/myappname
project_target_dir_env: "{{ project_target_root }}/bin"
Run Code Online (Sandbox Code Playgroud)

这个想法是在远程框上使用用户“myappname”(由“myappname_server”正确别名,我运行的其他播放效果很好)在将目录更改为“/”后运行“/home/myappname/bin/run”家/我的应用程序名称/bin”。如果我手动执行此操作,一切正常,即目录存在,文件可读,脚本工作等,一切都很好。但是如果我执行脚本,生成的ansible 执行代码似乎有问题。是我和我的配置希望如此)?它是 ansible 吗?

我用 -vvvv 运行它以获取大量信息:

monsterkill@monsterkill-ub-dt:~/playbooks$ ansible-playbook install_myappname_restart.yaml -vvvv

PLAY [myappname_server] ********************************************************** 

TASK: [Restart application] *************************************************** 
<vagrant1> ESTABLISH CONNECTION FOR USER: vagrant
<vagrant1> …
Run Code Online (Sandbox Code Playgroud)

ansible

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

标签 统计

ansible ×10

array ×1

bash ×1

file-permissions ×1

macos ×1

script ×1

ubuntu ×1