似乎所有作业都已排队,一次只能运行一个作业。我们如何运行多个任务?假设您的作业包含三个任务:
任务1:“做x”,任务2:“做y”,任务3:“做z”
使用ansible,“dox”将在所有服务器上运行,然后“doy”将在所有服务器上运行,然后“doz”将在所有服务器上运行
另外,我说的是“所有服务”,但事实上它在ansible“forks”值处最大,默认值为5。在我的100服务器环境中,我将该值设置为20。更多信息请点击此处:
记住ansible的优势在于同时在多台机器上完成一项工作(一组任务)。
我有一个Ansible任务,它封装了其他人维护的相当复杂的shell脚本。这个shell脚本安装了一个高度定制的web堆栈,其中许多组件都是从源代码处编译的
每隔一段时间,shell脚本就会将各种组件更新为较新的版本。发生这种情况时,我希望管理这些服务的conf文件的Ansible模板任务失败,这样我就可以手动查看更改的内容
使用Ansible,如何检查已安装版本的内容并将其注册为变量,以便在以后的任务中使用?
示例:MariaDB是从源代码编译的,因此我想创建一个Ansible变量,该变量等于
我正在使用ansible在25台服务器上禁用selinux
- name: disable selinux
selinux: state=disabled
SERWER是在主机文件中定义的,我正在用
ansible-playbook -v -i hosts ansible/server-prepare.yml
输出如下所示:
GATHERING FACTS ***************************************************************
ok
使用Ansible Synchronize与Copy模块的优缺点是什么。据我所知,synchronize具有copy所具有的所有功能,但可能要快得多,因此我正在考虑将所有内容更改为使用synchronize。同步的唯一缺点是需要rsync,这在Linux环境中似乎非常普遍。这些区别与传统的rsyncvsscp非常相似。Rsync有更多的特性,通常速度更快,但是它的设置有点复杂,并且有更多的旋钮要转动
此外,缔约国:
“复制”模块递归复制功能不能扩展到大量(>数百)文件。有关替代方案,请参阅同步模
我想使用Ansible来管理Hadoop集群(运行Red Hat)的配置
我有sudo访问权限,可以手动ssh进入节点执行命令。然而,当我试图运行Ansible模块来执行相同的任务时,我遇到了问题。虽然我有sudo访问权限,但我不能成为root用户。当我尝试执行需要提升权限的Ansible脚本时,会出现如下错误:
抱歉,不允许用户awoolford执行'/bin/bash-c echo'
been-SUCCESS-[…]/usr/bin/python
/tmp/ansible-tmp-14466
以下命令在我的OSX终端上工作:
ssh vagrant@192.168.50.100 -i .vagrant/machines/centos100/virtualbox/private_key
我有一个名为“主机”的清单文件,其中包含以下内容:
ansible -i hosts all -m ping -v
192.168.50.100 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/centos100
我正在尝试编写一个ansible剧本,以便在远程主机上运行命令
是否可以使用游戏内手册编写主机ip、用户名和密码?如果清单文件位于这样的组下,则可以添加主机名:
[group-name]
34.67.12.12
- hosts: group-name
gather_facts: true
sudo: yes
vars_files:
- "group_vars/group-name/config"
roles:
- do-bla-bla
然后在剧本yml中,您可
为了避免意外,我想实现一个解决方案,防止并发部署到同一个目标主机
请记住,我们不想妨碍从我们自己的机器而不是集中管理服务器进行部署的能力
我们只是想确保我们不会同时做同样的事情。您可以检查文件并将文件放到您执行的主机上:
tasks:
- stat: path=.ansible_lock_file
register: lock_file_check
- fail: msg="ansible is already being run against this ho
我有一个现有的playbook变量字典,定义如下:
vars:
resource_tags: {
Name: "some name"
Service: "some service"
}
这用于此表单中对任务的各种调用。但在另一个任务中,我需要一种不同的格式,而不是硬编码,我想知道它是否可以在任务中构建
我需要它看起来像:
{
"tag:Name": "some name"
"tag:Service": "some service"
}
我尝试使
在使用Ansible的lineinfle模块向/etc/fstab添加多个装载点之后,我想运行一个简单的mount-a,使它们生效
它确实与
- name: mount all
command: mount -a
become: true
然而,ansible坚持建议使用mount模块
[WARNING]: Consider using mount module rather than running mount
但在我看来,要做到这一点并不容易
我遗漏了什么吗?你说得对
标签: Ansible
ansible-playbookansible-2.x
我试图替换文件中的一个字符串。例如:
$PASSWORD="oldpassword"
与:
下面是一个可以完成此任务的任务:
- name: change password with lineinfile
lineinfile:
dest: test.txt
regexp: '^$PASSWORD='
line: '^$PASSWORD="newpassword"'
state: present
backrefs: yes
不幸的是,我找不到它
当我以这种方式运行剧本runrole.yml时:
ansible-playbook -i '192.168.0.7,' runrole.yml -e "ROLE=allwindows" -e "TARGETIP=192.168.0.7" -e "ansible_port=5986" --ask-vault-pass
runrole.yml具有:
- hosts: '{{TARGETIP}}'
roles:
- { role: '{{ROLE}}' }
它可以工作(即它运行于192.
我们正在处理bigdata,并使用RTC检入我们的代码。我们正在使用Ansible部署代码,将包从nexus部署到目标服务器。它还涉及执行签入RTC的SQL脚本。我的问题是如何将Ansible与RTC集成,因为我认为Ansible没有任何模块支持这一点?我希望ansible从RTC中选择sql脚本,并在目标数据库上执行它。我怎样才能做到这一点?如果不可能,我还应该尝试什么
谢谢
阿披舍克·索马尼只要您的目标服务器拥有,它就拥有像这样的处理命令
可以使用scmload命令,并且可以从Ansible
今天下午,当运行ansible临时命令时,我开始被提示输入vault密码
这个过程不应该需要这个,而且以前从未需要过
我只是在做类似的事情
ansible prod_servers -m shell -a "ls -al /var/logs/" --sudo
我只需要提供密码,命令就可以了,但这让我发疯了
我们使用的是ansible 1.8.4(不要问):(检查清单中组变量/主机变量下的vault文件–这应该是临时命令可能出现密码提示的唯一原因。在运行ansible命令的目录中是否有ansib
我对Ansible很陌生,有一个简单的问题需要我理解local\u action指令
这是否意味着命令在本地完全执行?假设你有这样的东西:
local_action: command which nginx
register: check_nginx
failed_when: no
changed_when: no
local_action: command ping -c 1 {{ inventory_hostname }}
然后你会看到另一个区块在寻找nginx的存在,类似于:
- fa
任何时候ansible中的断言被传递,我都会得到这样一个详细的输出
ok: [v-sax-769-e-a.develop.ebiz.grp] => {
"changed": false,
"failed": false,
"msg": "All assertions passed"
}
是否可以抑制(仅对于成功的)断言?第一行以ok开头。。。那就足够了
我看到过关于此功能的旧邮件,并要求提供此功能,但在ansible的文档中,我找不到标志或类似的东西。有一个问题:
我正在尝试运行一项任务,该任务将删除我的project fiolder的所有内容,而不删除文件夹本身:
我的文件夹:appFolder----包含-->文件1、文件2。。。文件,目录1…目录
我曾尝试使用ls,fileGlob,但没有正常工作
- name: delete old version files
file:
path: "{{ paths }}"
state: absent
with_filesglob:
- "{{paths}}deletes/*"
还有
标签: Ansible
ansible-factsansible-template
我有一个yml文件中的数据列表。
我想提取数据,使用双循环,就像我们以前做的那样。
这是我的清单的一个例子
[a,b,c]
vm1:
-a
-b
vm2:
-a
-c
vm3:
-b
这是用于一般部署目的。
我需要循环列表,对于每个元素,获取需要安装的vm的列表。
比如说
a > vm1 vm2
b > vm1 vm3
c > vm2
我试过了,但没用。
有什么办法解决这个问题吗?这个问题很类似于
下面是修改后的JMESPath:
---
- hosts: local
当我在ansible脚本中使用{{ansible\u user\u id}时,每当使用been=true执行脚本时,它就会出现故障,并且总是转换到根目录中
我需要将它转换为登录到远程操作系统的真实登录用户。在这种情况下我应该使用什么变量?答案
ansible\u ssh\u user包含连接用户的名称
其他方式/澄清
ansible\u user\u id包含执行设置任务的用户(或在收集事实:true时隐式使用),因此:
您可以设置collect\u事实:false,然后使用been:fals
标签: Ansible
roleshostsansible-inventoryansible-facts
我试图包括所有主机,因为我想在其他主机配置中使用一个主机事实
但我有
所有人的共同任务
两组的常见任务
单个组的任务
当我尝试以下方法时,所有任务都在所有主机上运行。我如何确保在特定组中应用角色
- hosts: Local:Global:Stream
tasks:
- include_role:
name: global
when: host in groups['Global']
- include_role:
name: local
在我的个人网络上,我有一个简单的主机列表:
[host1]
192.168.1.2
[host2]
192.168.1.10
当我设置本地主机时,比如“host2”,它有一个随机(dhcp)IP地址。我已经更改了hosts.ini并覆盖了主机IP地址,然后我使用hostvars将我想要的IP地址设置到它的dhcpcd.conf中
我的游戏有我所有的本地机器,所以我需要主机标签来匹配。但是,如果没有一些手动操作,我无法在第一次开机时使用它
我可以想出一些变通办法:
在ansible playbo
我试图在Ansible中使用vars\u prompt,默认值取自事实(或以前定义的变量)。playbook计划用作初始资源调配的临时手册
我的剧本:
---
- hosts: server01
gather_facts: True
vars_prompt:
- name: new_hostname
prompt: please enter the name for the target
default: "{{ ansible_hostname }}"
我试图在每台机器上本地构建特定的软件。playbook将下载源tarball(使用),配置并构建它
我想将要构建的项目列表定义为如下所示:
srcpkg:
蟒蛇:
版本:“3.7.0”
sha:“0382996D1EE6AAFE597634426CF0139 FFEBE3698474D0EC4126DD1C40A8B3549”
url:“https://www.python.org/ftp/python/{{srcpkg.python.ver}/python/python-{{srcpkg.py
标签: Ansible
ansible-2.xansible-role
我有一个ansible角色,它定义了两个参数和第二个参数的默认值
角色/上游/tasks/main.yml:
---
- debug:
msg: "Parameter in upstream is {{param}} and param2 is {{param2}}"
---
param2: []
角色/upstream/defaults/main.yml:
---
- debug:
msg: "Parameter in upstream is {{param}} and p
ansible playbook运行中的默认值--标记?
我如何修复--tags的空值,因为我对此有错误?标记的默认值是all谢谢康斯坦丁·苏沃罗夫。
我正在尝试使用Ansible上的mv模块,但我没有运气
在我最初的尝试中,我做了以下几点:
- name: changing the name of the file
shell: mv /tmp/bundle /opt/Rocket.Chat
- name: create directory
file:
state: directory
path: "/opt/Rocket.Chat"
- name: copy the fi
(在给出答案之前,请记住我已经尝试了和-,但都没有成功)
我想在易变变量方面做些花哨的事。我希望有一个格式良好的SQL(伪SQL)查询可以折叠成一行,而不需要新行字符
我的问题是,如果字符串具有标识,运算符不起作用
---
- hosts: localhost
gather_facts: no
tasks:
- debug: var=foo
vars:
foo: >
select foo
from bar
where ok
我已经创建了一个8Gb disksize ProxMox VM模板。使用ansible module proxmo_kvm,我克隆了它,但无法调整SCSI磁盘的大小。有可能吗?如果是的话,你能给我一些解释,让我明白是怎么回事吗
项目文件层次结构:
.
├── playbook.yml
└─── proxmox-vm/
├── tasks/
│ └── main.yml
└── vars/
└── main.yml
playbook.yml:
- ho
在这种情况下,我们需要在特定路径中比较两个版本,并且需要更改符号链接并指向更大的版本
例如:路径=/apps/share
ls-轻轨
8.5.38
8.5.39
当前-->8.5.39
我需要比较以上两个版本,并将符号链接指向更大的版本。我的问题是Ansible中是否有一个模块可以比较两个版本Ansible确实有一个测试。您可以使用类似于:
- debug:
msg: "version is newer"
when: new_version is version(old_versio
我有一个任务,它有多个with_项,因此在委托中选择最新定义的项,这不是预期的结果
- name: Add secondaries
run_once: true
delegate_to: "{{ item }}"
with_items:
- "{{ groups['mongodb-active'] }}"
shell: /usr/bin/mongo --eval 'printjson(rs.add("{{ item }}:27017"))'
with_items:
我希望使用Packer(构建图像)和Ansible(provisioner)来提供Ubuntu AMI
“名称”:“ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*”,
我遇到了一些困难,因为有些任务试图使用apt安装软件包,但锁被另一个进程持有。我很难确定哪些流程处于锁定状态最重要的是,特定流程的进展情况如何
默认情况下,amazon设置的AMI将在启动[0]时安装安全更新,因此我假设就是这样。正如文档所解释的,它可能与cloud init有关
ansible新手,找不到关于我的问题的参考资料,这似乎并不罕见
我在同一个组下有两个主机,每个主机都有它的变量,比如:
[myHosts]
host1 a=1 b=10
host2 a=2 b=20
现在,我有一个任务只需要在host1上执行两次,一次使用host1的变量,第二次使用host1中的a,以及host2中的b。
如果我这样写:
- role: my_role
vars:
a_val: {{ a }}
b_val: {{ b }}
我已经部署了Openshift,并且工作正常,但是现在我正在将一个DNS记录和一个有效的证书放在它前面。我没有任何运气,也没有找到任何关于这样做的文档
我更新主机名的策略是在主/节点配置的所有文件中使用新的公共主机名sed现有的公共主机名,但这似乎不起作用
我是否需要使用/更新特定的剧本/目录字段,以便从Ansible master轻松更新
更新:在使用以下内容更新库存文件后,我运行了“openshift master/redeploy certificates.yaml”:
openshif
我正在尝试创建一个剧本,其中创建的证书应作为变量添加,以从中创建模板。
创建的证书为*.pem格式,驻留在ansible localhost中。
我需要对这些文件进行cat,并将内容作为变量加载,如x_cert、y_key等。我尝试了shell:cat和register方法,该方法运行良好,但由于证书数量较多,因此不建议使用此方法,我正在搜索任何基于模块的方法
尝试了查找和slurp,slurp只在远程主机上工作,我希望它在本地主机上工作。我使用的查找不起作用。不确定
有人能解释一下吗
Slur
我正在用Ansible编写一个集群供应剧本,要求每个节点在安装时配置其他节点的公共证书。我想不出一个简单的方法来告诉ansible:
去拿远程证书
把他们推到名单上
使这些证书摘要可供每个远程节点使用,以生成经授权的节点列表
目前,考虑到集群节点的数量很少,我将手工完成这项工作(将第一个剧本的输出复制到第二个剧本的变量中)但如果有一种方法可以在一个剧本中做到这一点,那将是非常有帮助的。我的回答将尽可能笼统:将一个事实存储在组中的一台特定机器上,并从另一台机器读取组中所有机器的该事实
我想当然地认
我可以在ansible中使用以下内容吗:
---
- hosts: webserver
gather_facts: False
tasks:
- name: Check ping
shell: ansible -i localhost.yml -m shell -a 'ping'
该本地主机包含所有主机,而playbook将在Web服务器上运行
实际需求是在webserver上运行,而在一个任务中,我需要在主机文件中指定的所有主机上运行命令
提前谢谢
只需添加以
我需要在目标机器中设置环境。环境变量存在于名为.env的文件中。该文件中有几个变量,如
export AB_HOME=/tl/dev/abinit/abinit-V3 #/gcc3p32 # for 32-bit
export PATH=${AB_HOME}/bin:${PATH}
我尝试了下面的剧本来设置环境并注册环境变量,以便在environment关键字中使用它们
- hosts: dev
gather_facts: false
tasks:
- name:
这行不通
播放[127.0.0.1]***********************************************************************************
任务[在var2中测试var1]********************************************************************
致命:[127.0.0.1]:失败!=>{“msg”:“条件检查“var1在var2中”失败。错误是:({%if var1在v
通过命令行调用Ansible playbook时,下面的命令outer:local:dns将搜索或执行什么操作
ansible playbook——限制外部:本地:dns我想你可以用谷歌搜索一下。
传递给--limit的值是Ansible playbook将应用到的主机名或主机组。
您可以。命令outer:local:dns是一种模式,指的是资源清册中的多个组。
将此模式与--limit耦合意味着将为组外部、组本地和组dns执行剧本
有关ansible模式的更多信息,请参见此
我有包括_的作用,我使用从剧本的工作文件,我喜欢能够使用它从
不同的剧本,但并非所有剧本都需要执行所有的get_url属性。
例如:
- name: Download
include_role:
name: utilities
tasks_from: download
vars:
dest: "{{ ansible_env.APP }}/"
url: "{{ url }}"
这个角色:
---
- name: Download_role
get_ur
我使用lineinfle模块插入一条不存在的线,但当它存在多个空格时,它仍然插入一条线
输入:
one two three
(not exists) < Insert
one two three < Don't insert (it's correct)
one two three < Don't insert (having same words but multiple spaces)
- lineinfile:
path: /somefi
标签: Ansible
ansible-2.xansible-inventory
我使用的是ansible 2.9.6,目前我只有一台服务器,但它位于主机文件的两个组内。我为每个应用不同防火墙规则的组配置了ufw,当我运行“db_服务器”组的playbook时,它会从“web_服务器”组中获取VAR(ufw_规则)。考虑到服务器具有相同的名称,我希望vars至少能够合并。但是,如果我在相同的服务器组中为它们指定不同的名称“node_w”和“node_d”,那么它将与该组的相应变量一起工作。我没有导致问题的主机变量集
[web_servers]
node1 ansible_ho
我知道您可以使用ansible将文件从远程服务器复制到本地服务器。您甚至可以使用一些与从中获取的节点相关的变量来命名文件。我想做的是在复制文件后替换该文件上的某些字符串,理想情况下使用库存变量。这可能吗?是否有不涉及后处理bash脚本的解决方法?在获取文件后,只需通过任务向localhost进行委派即可
给定/tmp/somefile
还有剧本:
-主机:所有
收集事实:不
任务:
-获取:
src:/tmp/somefile
目的地:/tmp/已提取
-替换:
路径:/tmp/fetched/
我有一个剧本,如下所示:
- hosts: localhost
tasks:
- name: update a file
blockinfile:
dest: /tmp/test
block: |
line 1
line 2
运行剧本时,文件/tmp/test变为:
a # this is the end line of the original file
# BEGIN ANSIBLE MANAG
我有一组任务,需要一个通用的变量列表。
这种列表的问题在于,它需要对每个任务进行一定的定制。
公共块是docker容器的标签列表(因此它们由traefik发现)。
我可以将标签列表放在剧本的vars部分的一个变量中,但它只会被评估一次,我希望每个任务都使用一组新的变量重新评估它
这是标签列表(ansible格式):
标签:
-“traefik.enable=true”
-“traefik.backend={{service_name}}”
-“traefik.frontend.rule=Host
我想从ansible清单中获得主机组名列表(仅限),但是我必须使用grep根据已知的组名模式来缩减列表-例如
输出干净但命令行混乱,需要提前了解组名模式:
ansible inventory-i inventory/production-list-yaml | grep webserver.*:$
清理命令行,不需要知道组名模式,但输出混乱:
ansible playbook my-playbook.yml-i库存/生产--列出主机
是否有一种干净的方法从库存中提取组名
示例hosts.
我有这个任务,我试图猫与密码的文件,并附加到另一个文件通过ansible stdout
- name: get password value
shell: "cat {{ playbook_dir }}/../PASSWORD/PASSWORD.txt"
register: PASSWORD_VALUE
- debug: var=PASSWORD_VALUE.stdout
- name: echo PASSWORD password value to anothe
我有以下json模式:
{
...
"properties": {
"gitlabUrl": {
"description": "URL of the GitLab instance to use",
"type": "string",
"default": "https://gitlab.co
以下任务失败,出现以下错误
fatal: [nl3832yr]: FAILED! => {"changed": true, "cmd": ["/bin/cp", "-Rf", "/opt/omnius/ose/media.bak/*", "/var/opt/ose_media/"], "delta": "0:00:00.004059"
我正在寻找一种方法来构建一个清单组,其中包括所有尚未放入另一个组的主机
在我的例子中,这些小组确定某个特定服务器应该在什么时候更新——要么在周一、周三、周五,要么“任何一天都不重要”。我不想显式地枚举主机,因为这是手动工作,而且容易出错
all:
hosts:
host1[1-100].example.com:
children:
updateMonday:
hosts:
host1.example.com:
host4.exa
1 2 3 4 5 6 ...
下一页 最后一页 共 189 页