如何在Ansible playbook中声明全局变量.我在谷歌搜索并找到了以下解决方案,但它没有按预期工作.
- hosts: all
vars:
prod-servers:
- x.x.x.x
- x.x.x.x
- hosts: "{{prod-servers}}"
tasks:
- name: ping
action: ping
Run Code Online (Sandbox Code Playgroud)
当我尝试上面的代码时,它说变量prod-servers
是未定义的.
在我的库存中,我定义了这样的主机:
[server1]
141.151.176.223
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个保留server1
名称的变量,因为我用它来定义服务器主机名.
inventory_hostname
设置141.151.176.223
ansible_hostname
为以及inventory_hostname_short
设置为148
.
要解决此问题,我正在设置我自己的变量,如下所示:
[server1]
141.151.176.223 hostname=server1
Run Code Online (Sandbox Code Playgroud)
但我不满意这种方法.
有任何想法吗?
我有一些困难使Ansible配置适应我的环境.
我的测试环境:
我的ansible主机库存如下所示:
[servers]
server1 ansible_ssh_host=192.168.0.1 ansible_sudo=true ansible_ssh_user=foo ansible_sudo_user=bar
Run Code Online (Sandbox Code Playgroud)
我有一个用于foo用户的SSH密钥.
当我使用条形码密码尝试这个ad hoc命令(或任何其他命令)时:
ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass
server1 | FAILED => Incorrect sudo password
Run Code Online (Sandbox Code Playgroud)
然后,如果我使用foo密码执行相同的命令:
ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass
Sorry, user foo is not allowed to execute '/bin/bash -c echo SUDO-SUCCESS-rlpfhamukjnsfyokqbjpbttviiuildif; echo test > /etc/testfile' as bar on server1.
Run Code Online (Sandbox Code Playgroud)
所以Ansible肯定使用foo作为sudo用户而不是我指定的bar.有没有办法强制使用bar而不是foo?我真的不明白Ansible上的sudo功能,即使我使用相同的用户一切(SSH和条形码密码)ansible给我回报:
server1 | FAILED | rc=1 >>
echo test > /etc/testfile : Permission denied
Run Code Online (Sandbox Code Playgroud)
当我在主机上记录为条形并执行"sudo echo …
Ansible版本:2.1.0
我的ansible主机文件是:
[PM]
xyz.example.com ansible_connection=ssh
[ND]
pqr.example.com ansible_connection=ssh
[CM]
xyz.example.com ansible_connection=ssh
pqr.example.com ansible_connection=ssh
Run Code Online (Sandbox Code Playgroud)
剧本是:
- hosts: PM:ND:CM
remote_user: root
tasks:
{some thing}
- hosts: PM
remote_user: root
tasks:
{some thing}
- hosts: ND
remote_user: root
tasks:
{some thing}
- hosts: CM
remote_user: root
tasks:
{some thing}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下命令运行剧本:
ansible-playbook --limit 'PM' akana-installation.yml
Run Code Online (Sandbox Code Playgroud)
但是剧本仍在与所有主机一起播放,这意味着
Play 'PM:ND:CM'
Play 'PM'
Play 'ND'
Play 'CM'
Run Code Online (Sandbox Code Playgroud)
那些戏都在玩。请帮助我解决此问题。
我需要的是:在执行剧本时,我会给组名称,只有组才能播放,所以请告诉我还有其他方法。
我正在使用 Ansible 创建一个新的 EC2 实例并尝试在其上安装一些软件包。问题是我正在向主机组添加新主机,但我在另一个游戏中看不到该主机组。当到达“配置 EC2 实例”时,它会显示:
玩【配置EC2实例】*********************************************** ****************** 跳过:没有匹配的主机
这是代码:
---
- name: Provision an EC2 Instance
hosts: localhost
connection: local
gather_facts: False
tags: provisioning
# Necessary Variables for creating/provisioning the EC2 Instance
vars_files:
- vars/variables.yml
- vars/aws_auth.yml
# Task that will be used to Launch/Create an EC2 Instance
tasks:
- name: Create security group
ec2_group:
aws_access_key: "{{ec2_access_key}}"
aws_secret_key: "{{ec2_secret_key}}"
name: "{{ project_name }}_security_group"
description: "{{ project_name }} security group"
region: "{{ aws_region }}"
rules:
- proto: tcp
from_port: …
Run Code Online (Sandbox Code Playgroud) 我已经在不同的角色中定义了 nginx_upstreams 变量,该角色又使用 geerlingguy.nginx 角色,并且我还指定了“名称”、“策略”和“服务器”,但是当我运行此角色时,ansible 会抛出给定的错误下面就好像它无法访问为 nginx_upstream 定义的“name”变量一样。
这是抛出错误的任务
- name: Create upstream files
file:
path: "{{ nginx_vhost_path }}/{{ item.name + '.conf' }}"
state: touch
with_items: "{{ nginx_upstreams }}"
Run Code Online (Sandbox Code Playgroud)
这是定义“nginx_upstreams”时使用的角色。
- name: "Configure specific nginx service for concert to connect on remote host"
include_role:
name: geerlingguy.nginx
vars:
#for configuration specific to each server
nginx_upstreams:
- name: SOME_UPSTREAM_NAME
strategy: SOME_STRATEGY
servers: "{{ SOME_SERVER }}"
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误-
fatal: [IP]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error …
Run Code Online (Sandbox Code Playgroud) Ansible 正在读取/etc/ansible/hosts
文件并给出我不明白的错误。
ARNING]: * Failed to parse /etc/ansible/hosts with yaml plugin: Syntax
Error while loading YAML. did not find expected <document start> The error
appears to be in '/etc/ansible/hosts': line 2, column 1, but may be elsewhere
in the file depending on the exact syntax problem.
Run Code Online (Sandbox Code Playgroud)
为什么 ansible 试图用 yaml 插件解析这个 INI 风格的文件?
什么是<document start>
?我在任何文档中都找不到这个
该文件看起来像这样(不是实际的)
[first_group]
host-1 ansible_host=1.1.1.1
host-2 ansible_host=2.2.2.2
Run Code Online (Sandbox Code Playgroud)
谢谢你。
编辑:
更多信息:
ansible@ansible:~$ ansible-config dump | grep INVENTORY
DEFAULT_INVENTORY_PLUGIN_PATH(default) = [u'/home/ansible/.ansible/plugins/inventory', u'/usr/share/ansible/plugins/inventory']
INVENTORY_ANY_UNPARSED_IS_FAILED(default) = …
Run Code Online (Sandbox Code Playgroud) 问题:
该场景用于解释Ansible中模块的使用。
为此,您必须停止并启动名为 的服务
ssh
。要完成的任务:- 在 fresco_module\tasks 文件夹中的 main.yml 文件中编写任务。
任务是停止和启动ssh
使用 Ansible 中的服务模块命名的服务。
笔记:
我的代码:
- hosts: localhost
become: yes
tasks:
- name: Stop and Start ssh
service:
name: ssh
state: "{{ item }}"
with_items:
- stopped
- started
Run Code Online (Sandbox Code Playgroud)
输出:
PLAY [localhost] *******************************************************************************
TASK [Gathering Facts] *************************************************************************
[DEPRECATION WARNING]: Distribution Ubuntu 16.04 on host localhost should use /usr/bin/python3,
but is using /usr/bin/python for backward compatibility with …
Run Code Online (Sandbox Code Playgroud) 使用 Ansible,我试图在剧本级别定义某种默认变量 - 让我们称之为剧本默认值- 它优先于角色默认值,但可以被库存清单group_vars/所有变量覆盖。
如何定义某种剧本默认变量,该变量优先于角色默认值,但同时可以被清单(环境)覆盖?
目前 Ansible 2.x 变量优先级如下:
- 角色默认值
- 库存文件或脚本组变量
- 库存组_vars/全部
- 剧本 group_vars/all
我希望实现的目标是:
- 角色默认值
- 剧本默认值
- 库存文件或脚本组变量
- 库存组_vars/全部
- 剧本 group_vars/all
从我之前使用的大多数工具和应用程序来看,在环境级别(开发、测试、QA、产品等)定义的变量优先于“应用程序”变量,而“应用程序”变量本身优先于“外部”组件。那么优先顺序如下:
环境具有最高优先级。但我找不到用 Ansible 重现这种模式的方法。这些事情在 Chef(外部说明书默认值被包装器说明书默认值覆盖)和 Puppet 中很容易,但我找不到使用 Ansible 实现相同目的的方法。
让我们考虑一个由多个与 Web 服务器交互的服务组成的应用程序。这些服务是通用的,并在我组织的其他部分中重复使用,但就我而言,我使用了 apache2。我有这些角色:
这些默认变量:
# roles/apache/defaults/main.yml
apache_listen_port: 80
# roles/green_service/defaults/main.yml
green_service_port: 80
# roles/blue_service/defaults/main.yml
blue_service_port: 80
# roles/red_service/defaults/main.yml
red_service_port: 80
Run Code Online (Sandbox Code Playgroud)
每个服务都必须知道 apache 端口,这在默认值中表示。如果其他应用程序需要 Nginx 或其他网络服务器的绿色服务,则只需包含相关角色即可。
现在,如果我想在一个或多个环境中将端口从 …
Ansible AWX 要求以 yaml 或 json 格式输入库存。
当您开始学习 ansible 时,您可以选择从 ini 格式的库存开始。
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
可以在格式之间转换吗?