标签: ansible

没有第一个目录的ansible提取

在ansible中提取tar.gz文件时,我最终得到了第一个目录

- name: Extract archive
  unarchive: src=file.tar.gz
             dest=/foo/bar
Run Code Online (Sandbox Code Playgroud)

这导致/foo/bar/bar-version-someFirstLevelFolder/contentOfArchive 如何防止创建这种额外的层次结构?

tar ansible

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

使用临时命令列出主机或组的所有 Ansible 变量?

Ansible 变量来自各种来源。例如,可以通过在包含清单文件的文件夹中分别命名为host_vars和的子文件夹中创建 YAML 文件来提供 host_vars 和 group_vars group_vars

如何列出所有的变量Ansible知道一个剧本内的组或主机?注意:我尝试过ansible -m debug -e 'var=hostvars' hostansible -m debug -e '- debug: var=hostvars'但无济于事。

提示:ansible <group|host> -m setup不是正确的答案,因为它并没有包括所有来自其他来源的变量(只包含{ "ansible_facts" : { ... } }在事实上,它甚至不包括通过由动态库存脚本(提供变量。_meta等)。

Ansible 版本:1.9.1。

ansible

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

ansible 符号链接的正确语法

使用 ansible 创建符号链接的正确语法是什么? 我正在创建一个 Vagrant 虚拟环境并作为我的供应商运行 ansible。一切正常,直到我尝试从启用了站点的站点符号链接到我的站点 nginx 配置文件。这是我尝试过的。

- name: Create symlink to example.com
  file: 
    path: /etc/nginx/sites-enabled/example.com 
    dest: /etc/nginx/sites-available/example.com 
    state: link
  notify: nginx reload
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我遇到了以下错误。

错误:加载 YAML 脚本时出现语法错误,/Users/username/project/ansible/roles/nginx/tasks/main.yml

注意:错误可能实际出现在这个位置之前:第24行,第1列

- 名称:指向 example.dev.conf 的符号链接

文件:路径=/etc/nginx/sites-enabled/example.dev.conf

状态=链接

^ Ansible 未能成功完成。任何错误输出都应该在上面可见。请修复这些错误,然后重试。

我也试过使用src=/etc/nginx/sites-enabled代替,path但我似乎无法在网上找到一个明确的例子。

眼镜:

  • OSX小牛队
  • 流浪者 1.6.3
  • 虚拟盒 4.3
  • nginx 1.6.0
  • 安全的 1.6.2
  • Ubuntu 14.04

nginx vagrant ansible

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

Ansible 在任务名称中使用 inventory_hostname 或 ansible_hostname

我正在编写滚动升级手册,并想打印出当前已升级主机的主机名。

我输入inventory_hostname并输入ansible_hostname了任务名称,但这不起作用

- name: upgrade softare on {{inventory_hostname}}
- name: current host is {{ansible_hostname}}
Run Code Online (Sandbox Code Playgroud)

调试工作正常

- name: Test a variable
  debug: var=inventory_hostname

TASK: [Test a variable] ******************************************************* 
ok: [SERV14] => {
    "var": {
        "inventory_hostname": "SERV14"
    }
}
Run Code Online (Sandbox Code Playgroud)

那么我应该怎么做才能在任务名称描述中使用这些变量。

谢谢

ansible

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

如何在 Ansible 任务中注册动态命名的变量?

我正在尝试使用 Ansible 任务按名称检索两个组(syslogutmp)的组 ID 。出于测试目的,我创建了一个剧本来从 Ansible 主机本身检索信息。

---
- name: My playbook
  hosts: enabled
  sudo: True
  connection: local
  gather_facts: False
  tasks:
    - name: Determine GIDs
      shell: "getent group {{ item }} | cut -d : -f 3"
      register: gid_{{item}}
      failed_when: gid_{{item}}.rc != 0
      changed_when: false
      with_items:
        - syslog
        - utmp
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在运行剧本时收到以下错误:

fatal: [hostname] => error while evaluating conditional: gid_syslog.rc != 0
Run Code Online (Sandbox Code Playgroud)

如何将这样的任务合并为参数化形式,同时注册单独的变量,每个项目一个,供以后使用?所以目标是拥有基于组名的变量,然后可以在以后的任务中使用。

我正在使用int过滤器,gid_syslog.stdoutgid_utmp.stdout在以后的任务中根据 GID …

ansible

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

如何安装特定版本的ansible?

如何使用 Yum 或其他方法安装特定版本的 Ansible?

当我尝试安装2.0 版时,它说No package 2.0 available

我检查了 epel 回购。只有两个 rpm,但没有包含版本 2.0 的 rpm。为什么它们会被移除?有没有办法安装特定版本的ansible,比如2.0?

yum fedora pip ansible virtualenv

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

每当 ansible 在 CentOS7 中对 sshd 进行更改时,随机的未来播放无法连接

这已经是一个令人恼火的问题,现在我想我最终会向整个社区询问可能的解决方案是什么。更令人恼火的是,我似乎是唯一遇到此问题的人。

本质上,任何时候在 CentOS 7.x、sshd 配置或 sshd 的任何部分被修改,守护进程在接下来的 3 分钟内在某个“随机点”重新启动/重新加载,ssh 连接全部重置,然后该服务器是通过 ssh 几秒钟无法访问。

这对于 ansible 来说尤其是一个问题,因为它有时需要自己对 sshd 进行这些更改,并且还需要重新加载它(例如在新的 CentOS 7x 服务器构建中)。但是在将来播放时,它只是随机无法连接到 ssh,并且它会炸毁该主机的其余剧本/播放,但未能联系到该主机。这对于大型主机模式尤其不利,因为其中一些会随机完成,但在 sshd 被操纵后,其他的会在剧本的各个阶段失败。值得注意的是,在 CentOS 5x、6x 甚至 Solaris 上都不会发生这种情况。

为了避免这种情况,我能做的最好的事情是在对 sshd 进行任何更改后创建 90 秒的等待时间,即使这也不是完全万无一失的。如果调用 7-8 次,它会使这些剧本需要 20 多分钟才能运行。

以下是有关此环境的一些事实:

所有新安装都来自官方 ISO DVD。每台服务器都是 hyper-v 2012 来宾每台有这个问题的服务器都是 CentOS 7.x

以下是问题的一些实际输出和一些陈腐的解决方案:

失败:

fatal: [voltron]: UNREACHABLE! => {"changed": false, "msg": "All items         completed", "results": [{"_ansible_item_result": true, "item": ["rsync", "iotop", "bind-utils", "sysstat.x86_64", "lsof"], "msg": "Failed to connect to the host via ssh: Shared connection to voltron …
Run Code Online (Sandbox Code Playgroud)

scripting centos sshd ansible

10
推荐指数
1
解决办法
2570
查看次数

我可以在安装 yum 包时自动接受 MS SQL 许可条款吗?

我正在使用AnsibleMS SQL Server 2017 配置CentOS 7.4 机器。我首先通过命令行浏览了本指南并且它有效,但我的最终目标是“Ansible-ize”它。但是,当我进入安装命令行工具的步骤时,该-y开关无法接受许可证。

[user@host ~]$ sudo yum install -y mssql-tools unixODBC-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package mssql-tools.x86_64 0:14.0.6.0-1 will be installed
--> Processing Dependency: msodbcsql < 13.2.0.0 for package: mssql-tools-14.0.6.0-1.x86_64
--> Processing Dependency: msodbcsql >= 13.1.0.0 for package: mssql-tools-14.0.6.0-1.x86_64
---> Package unixODBC-devel.x86_64 0:2.3.1-11.el7 will be installed
--> Running transaction check
---> Package msodbcsql.x86_64 0:13.1.9.1-1 …
Run Code Online (Sandbox Code Playgroud)

yum centos ansible

9
推荐指数
2
解决办法
7937
查看次数

如何从 vim 内部使用 ansible-vault 编辑打开文件?

通常,当我想打开由 ansible-vault 加密的文件进行编辑时,我只需运行ansible-vault edit <filename>- 这会将文件解密为临时文件并打开它进行编辑。

但是,我想知道的是如何从 vim 中实现这一点,例如通过使用:! ...command...语法运行 shell 命令。例如,我知道我可以通过在 vim 中打开加密文件来解密文件,然后运行:

:! ansible-vault edit %
Run Code Online (Sandbox Code Playgroud)

但这会在不同的窗口中使用 ansible-vault 打开文件,然后您必须按一个键才能返回 vim。

我想要做的是能够用 vim 打开这个文件,这样我就可以将它与其他常规文件或使用 ansible-vault 加密的文件一起编辑。目前我正在通过打开几个 tmux 窗格来做到这一点,但这有点像 PITA。

vim window-management ansible

8
推荐指数
1
解决办法
1281
查看次数

在命令返回之前终止并禁用/删除无人值守升级

我在这里遇到了一个问题,我尝试使用 Ansible 自动进行设置。

某些步骤需要与 交互apt,但有时我会收到错误消息,因为无人值守升级已启动并已锁定。这将使剧本停止。

我已经尝试了很多方法来解决这个问题,最成功的是重复失败的 apt 命令。

但这不能扩展,也不是 100% 可靠并且感觉很糟糕。

我选择apt -y purge unattended-upgrades在剧本的开头发出权利。我也试过apt -y remove unattended-upgrades,但那个似乎还在工作时回来了。清除似乎在退出之前关闭无人值守升级,这就是我想要的。

但事实证明,即使是那个调用也apt -y purge unattended-upgrades可能由于锁定而失败。所以我把它改成了while [[ $(dpkg -l | grep -P "unattended-upgrades" | wc -c) -ne 0 ]]; do apt -y purge unattended-upgrades; done,但偶尔也会失败(我不知道为什么)

我需要一个命令,该命令在执行时会立即终止并隐藏无人值守的升级,无论它是否正在运行,并保证一旦该命令返回它就不会再启动,直到我apt install再次明确表示为止。如果该命令需要一分钟来完成它的工作,那没关系。

此外,系统没有安装 Python,所以 Ansible 只发出raw命令,直到我设法安装 Python,这应该是在成功调用之后apt -y update

我处于可以轻松触发无人值守升级的状态,因为这是一个 VM,一旦我发出date -s更正过时日期的命令,无人值守升级就会启动。启动 VM 后,我有几分钟的时间直到date自动更正,然后开始无人值守升级。

这就是我现在正在做的:

- name: Disable autoupdate …
Run Code Online (Sandbox Code Playgroud)

ubuntu ansible unattended-upgrades

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