标签: Ansible
ansible-playbookidempotent
我正在使用Ansible playbook配置服务器。我的playbook在第一次执行时正常工作,但当我再次运行同一playbook时,它会在服务器上的配置文件中创建重复的行。
我正在使用lineinfle模块。下面的任务示例在我每次运行playbook时添加该行
- lineinfile: dest=/etc/pam_ldap.conf line="ssl off"
有没有办法避免这种情况,并保持幂等性。理论上lineinfle应该像您预期的那样工作。仅当文件中没有行时才添加行
该文件是一个
使用ansible可以将文件从一个vm窗口复制到另一个vm窗口
- script: test.ps1
Z:这是网络地图吗
复制z:\PROGRA~1\test\File.txt C:\Users\File.txt
failed with error:
changed: [{{ host1 }}] => {"changed": true, "rc": 0, "stderr": "copy : Cannot fi
nd drive. A drive with the name z d
对ansible来说相当陌生。
拥有以下角色,例如:我的角色-我无法覆盖剧本中的默认变量
以下文件:
my-role/tasks/main.yml
my-role/defaults/main.yml
sample-playbook.yml
我的角色/任务/main.yml
- name: "Add Test User"
user: name={{ my_config_test_user }} comment="{{ my_config_test_user }}" group={{ my_c
我的主机文件包含如下组:
[api_dev:vars]
private_key_file=/opt/keys/api_dev.pem
但是当我尝试ping服务器时:
ansible api_dev -m ping -vvvv
我发现私钥文件没有被使用
此外,我还尝试在/etc/ansible/group_vars中创建group_var文件,然后指定如下键:
---
private_key_file: /opt/keys/api_dev.pem
还是没有运气
我正在查看以下信息:
我错过什
我有Postgres 9.4视图,我希望允许选择打开,我执行以下操作
- postgresql_privs: >
database={{ services.oos.db }}
state=present
privs=SELECT,INSERT,UPDATE,DELETE
type=view
objs=ALL_IN_SCHEMA
schema=my_schema
roles=my_users
sudo_user: postgres
tags: [api, customer]
这将导致以下错
我们有一个ansible服务器设置,ansible代码存储在git repos中。ansible配置的所有服务器当前都使用来自控制服务器的SSH密钥进行访问。但是,我希望将密钥包含在ansible git repos中(在vault中加密)。我想这样做:
1) 如果我们的ansible服务器遭到破坏/出现无法恢复的硬盘故障/其他一些故障,我们就不必在再次运行ansible任务之前生成新的ssh密钥并将其复制到每个ansible服务器
2) 感觉它应该在repos中,因为它是访问服务器的设置/配置
我有以下角色/meta/main.yml脚本:
---
dependencies:
- role: common
- role: nginx
- role: postgres
- role: my_db
我需要在特定主机上安装my_db角色,比如说1.2.3.4。如果您只想安装一个卷,您应该创建一个仅将该角色应用于主机的剧本
- hosts:
- 1.2.3.4
roles:
- my_db
解决办法是:
---
dependencies:
-hosts:
我是新来的
我正在用Ansible写一本剧本来更新CentOs 7上的人工制品。在我的脚本中,我希望编写一些方法来获得在我的机器上运行Artifactory的版本
有人有办法得到这个吗
我认为这可以通过人工RESTAPI来实现,但如果RESTAPI可以实现的话,我不确定如何实现这一点
如果需要进一步的细节,请随时给我回信 Artifactory REST API方法返回Artifactory版本:
GET /api/system/version
{
"version" : "4.15.0"
我试图将我的主机列表文件从IP地址重命名为别名,但由于某些原因,当我运行我的playbooks时,我得到了以下错误
致命:[测试]:失败!=>{“changed”:false,“failed”:true,“msg”:“无法打开shell。请参阅:”,“rc”:255}
以下是主机文件中别名的示例
test ansible_ssh_host=192.168.1.1
我使用的是ansible 2.3.0版
下面是调试的输出。在调试中,我将主机命名为BWS_DRUN_1921
14580 15035
我正在尝试创建一个剧本,如果文件中完全没有一行,它会在特定的位置向文件中添加一行,但是如果该行存在于任何地方,它就根本不会被添加
例如,如果我要添加的行是“bar”,并且我要在“foo”之后添加的行,我可能有3个文件:
file1
foo
bar
baz
文件2
foo
baz
file3
foo
baz
bar
在file2中,将在“foo”之后添加“bar”。但是,file1和file3中已经存在“bar”,因此不应添加它,即使在file3中,它不是紧跟在“foo”之后
我试过这个:
当我这样设置我的记录\u数据时:
记录数据:{{some var}}
我得到这个错误消息TXT记录数据必须用双引号括起来,得到:CQ5fc59u-izwcu8\u PlI2HlvfUT73bH2VnMU\u jW3B5hY
正常,因为文档中说TXT记录的单个字符串记录数据必须用双引号括起来,请参见
所以我试过这个
记录数据:{{some var}}}
任务执行得很好,没有错误,但我没有成功。我得到了这样的结果,因为记录数据是某个变量的实际值
所以我的问题是,我怎样才能把变量值用双引号括起来
或者
因此,我遇到了一个奇怪的问题,ansible无法在角色中执行一些标记的include任务
经过一番挖掘后,似乎只要包含项与项关联,运行指定任务的能力就会中断
例如,我的简单角色包含:
role/tasks/main.yml
---
- include: test.yml
tags:
- my_role_test
role/tasks/test.yml
---
- debug:
msg: "It works"
当我使用--tags=my_role_test运行我的剧本时,
我试着发射,忘记一些任务,然后收集结果。这是我的剧本:
---
- hosts: node2
gather_facts: yes
tasks:
- name: 'Some long script no 1 on node2'
shell: "time sleep $[ ( $RANDOM % 20 ) + 20 ]s"
async: 40
poll: 0
register: script1
- name: 'Ano
我试图使用juniper_junos_软件模块在SRX550上安装12.3X48-D70,当它成功安装并重新启动设备时,由于“无处理程序”错误,任务返回失败
剧本:
- name: Upgrade Juniper devices
juniper_junos_software:
host: "{{ inventory_hostname }}"
local_package: "junos-srxsme-12.3X48-D70.3-domestic.tgz"
reboot:
我创建了一个Ansible playbook,它只检查与特定端口上的目标主机的连接。
这是我的剧本
- name: ACL check to target machines.
hosts: all
gather_facts: False
vars:
target_hosts:
- server1 18089
- server1 8089
- server1 18000
tasks:
- name: execute the
有人可以发布一个关于如何在自定义模块中使用预定义ansible模块示例-“git模块”的示例吗
我试图将以下任务转换为单个自定义模块-
- name : clone repo on remote hosts
git :
repo : {{ git_repo_src }}
dest : {{ git_repo_dest }}
- name : fetch template from single remote host
run_once : true
fet
我想要一些关于具有多个条件的打印语句语法的帮助。当前,“{{inventory\u hostname}}”的引号会导致错误,如果我删除引号,playbook会运行,但会列出文本inventory\u hostname,而不是变量。我想知道如何打印变量,以及if-else语句中的语法是否良好
- debug:
msg: "{{ 'LTE status on '{{inventory_hostname}}' is good to go!' if output.stdout | join('
我有一个大型剧本,它使用多个角色来设置新服务器。我想重复使用剧本,但在退役阶段,而不是调用role\u name/tasks/main.yml并有很多when:语句,我想告诉Ansible调用该角色,但从role\u name/tasks/decommission.yml开始
作为第一个测试,我将main.yml文件设置为:
- name: "Provisioning new server"
block:
- name: "Include the provisioning st
我有一个filea_file.txt,如下所示:
22
23
8080
---
- hosts: host1
tasks:
- name: Remote hostname
shell: hostname
register: hostname
- name: Read items from a_file.txt
shell: cat a_file.txt
register: item_output
- name: R
标签: Ansible
ansible-2.xaws-secrets-manager
使用地形代码,我在AWS机密管理器中创建了其他类型的机密。
我需要在Ansible代码中使用这些AWS机密。我在下面找到了这个链接,但我无法继续
我有以下可翻译代码:-
database.yml
- name: Airflow | DB | Create MySQL DB
mysql_db:
login_user: "{{ mysql_user }}"
# login_password: "{{ mysql_root_password }}"
login_passwo
是否可以使用git ansible module从git中克隆一个文件?据我所知,ansible的git归档文件似乎只在本地克隆的repo中工作
目前我使用的是:
- name: Bring file from git
shell: git archive --remote=git://git.example.com/project.git HEAD:{{ test }} filename | tar -x -C folder1 -s /filename/filename_{{
我有一个剧本,其中的任务如下所示。push_config和import_consul都未传递,因此默认情况下为false
- name: checkout config-tibco repository
git:
repo: ssh://git@bitbucket.corp.contingo.com:7999/gwa/config-tibco.git
dest: "/opt/awx/tmp/config-tibco/"
when: "{
我正在尝试使用terraform和ansible脚本创建rabbitmq节点,其他脚本正在成功执行,但我在运行此脚本时遇到一个警告,即在rabbitmq节点中添加用户
[警告]:模块没有为更新密码设置任何日志
failed: [rabbit-node1] (item=admin) => {
"ansible_loop_var": "item",
"changed": false,
"cmd": "/usr/sbin/rabbitmqctl -q -n rabbi
所以我有一个负责任的任务:
- name: google._domainkey.ludoistic.com. - TXT
route53:
overwrite: true
command: "create"
zone: "ludoistic.com"
record: "google._domainkey.ludoistic.com."
type: "TXT"
ttl: "300"
value: '"v=DKI
有没有一种方法可以从java执行ansible playbook。你能帮我参考一下吗?找不到任何好的教程。最简单的方法是使用ProcessBuilder运行命令:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class AnsibleServive {
public static void main(String[] args) {
我有一个收集ec2_信息的剧本,我想根据when语句的条件检查结果向控制台显示用户信息。在我的剧本中,条件不起作用时的。我如何实现任务以确保正确的when语句结果
-hosts:localhost
收集事实:错误
任务:
-名称:ec2实例信息
ec2_实例_信息:
aws_访问密钥:“{{aws_访问密钥{u ID}”
aws_secret_key:“{{aws_secret_ACCESS_key}”
aws_地区:“{{aws_地区}}”
寄存器:结果
-名称:显示ec2信息
调试:
味精:
假设我有以下列表:
hosts:
- {"ip": "1.2.3.4", "hostname": "www.example.com"}
- {"ip": "42.42.42.42", "hostname": "www.wikipedia.com"}
我希望获得如下字符串(将其放入模板):
这与我使用hosts | join(',
更新:尽管此Q被标记为打字错误(因此“对用户不太有用”),但问题实际上是需要使用正确的ansible模块shell,而不是命令模块
我希望有人能告诉我哪里出了问题,我猜这与命令行中的语法或转义或字符有关(尽管我尝试用cut替换awk(带卷发),但没有运气),这导致了以下错误:
“stderr”:“\u001b[1;31mE:\u001b[0m命令行选项“F”[from-F,]与其他选项组合使用时无法理解。\u001b[0m”
基本上,在我创建的角色中,我想动态地存储一个列表,列出碰巧安装的gno
我有一个这样的剧本,我试图在ansible awx中作为作业模板运行它,但得到了一个回溯(最近一次调用):\n File\“/root/.ansible/tmp/ansible-tmp-1609214869.41401-6813-56941014390086/rhv snapshots.py\”,第4行,在prettytable导入prettytable\nModuleNotFoundError中:没有名为“prettytable”的模块error,它使用ansible CLI工作,但在awx中
标签: Ansible
jinja2ansible-2.xansible-template
我试图通过将cluster\u status命令输出作为一个变量,然后查看输出是否包含该组的所有主机,来验证rabbitmq集群状态。如果有主机丢失,请退出
如何检查一个字符串(命令\u输出)是否包含列表(组\u主机)中的所有值
我的代码:
-名称:检查群集状态
命令:rabbitmqctl cluster_status
寄存器:群集状态
更改时间:false
输出:
“stdout”:“节点的群集状态”rabbit@ip-127.0.0.1…\n[{节点,[{磁盘,['rabbit@ip-1
是ansible的授权密钥模块,可用于将主机的ssh密钥复制到新的远程用户?ansible完全通过ssh。因此,您也必须使用ssh来设置ssh。至少,您需要一个正在运行的ssh守护程序和一个可以使用密码访问主机的用户
然后,您可以使用-k(或-ask pass,请求SSH密码)、-k(或-ask sudo pass,请求sudo密码)和-u(或-user,作为此用户连接)访问主机
假设您有一个foo用户可以在远程计算机上使用ssh和sudo,并且您希望安装一些ssh公钥以root身份登录,您可以
我有一个ansible任务,可以将密钥从本地用户复制到远程计算机:
authorized_key: user=deployer key="{{ lookup('file', '/home/my_user/.ssh/id_rsa.pub') }}"
我想使用用户变量,而不是我的用户。环境变量(即查找('env','DEPLOY\u KEY\u PATH')或实际上任何变量
是否可能?要获取当前用户密钥,您当然可以使用~别名。这将起作用:
authorized_key: state=present
例如,我想克隆“管理员桌面”下的VM,如下图所示:
下面的脚本正在从指定模板克隆VM,并将VM放置到指定文件夹中。但在VCenter服务器上不存在该文件夹时失败:
需要帮助使此脚本灵活,以便当文件夹不存在时,它应创建所述文件夹,然后在此文件夹下克隆VM。您可以使用此Ansible模块在vsphere中创建文件夹:
#!/usr/bin/python
# -*- coding: utf-8 -*-
DOCUMENTATION = '''
---
author: "Shashank Awasth
我需要为超过100个系统的用户更改密码。我想和ansible一起做这件事。这很容易。但是ansible上的用户模块需要哈希密码。我很担心,因为有一些较旧的主机可能不支持较新类型的散列。我希望能够以编程方式识别可用的密码哈希算法,并使用适当的密码哈希进行更改。或者有没有更好的方法来处理整个销售
我曾考虑过以下几点:
echo username:password | chpasswd
并使用命令模块运行它。应该使用默认算法。这种方法有什么问题吗?在我看来,理想的方法是计算每台机器支持的哈希值,然后
标签: Ansible
ansible-playbookansible-role
在ansible中使用角色时,您如何成为用户
例如,如何使用ansible galaxy的geerlingguy.nodejs角色将nodejs安装为root用户?以下是我所拥有的相关部分:
roles:
- geerlingguy.nodejs
become: yes
但这会产生错误!在YAML文件上加载YAML时出现语法错误。我终于找到了一个解决方案,回想起来,从
这也可以写成:
roles:
- { role: geerlingguy.nodejs, become:
有没有一种简单的方法可以让ansible脚本(playbook)恢复它的功能
我有
-名称:安装所需的软件包
yum:name={{item}}state=present
有以下项目:
-nmp
变成:真的
我想得到:
sudo yum install nmp
也就是说,我想知道ansible正在运行什么命令(操作系统级)。
基本上,我需要一个相反的过程:在这里总结上面评论的中心点
Ansible很少运行外部命令,它主要是用于控制主机的Python代码和Python库。因此,Ansible的
下面是我创作的剧本。我没有办法存储和显示shell命令的输出,并将相同的输出传递给具有不同主机的其他播放
---
- hosts: localhost
tasks:
- name: "check the connectivity with username for all the LLC servers from hosts.new file"
shell: ssh dp794d@{{ item }} "date"
register: result
wit
从我在网上找到的资料来看,Ansible在jinja模板方面不太支持varibale内置
不过,我相信Ansible的高级人员已经为我下面的问题找到了解决办法
我想在station时将变量“插入”到。
i、 e.when:Disabled in(智能链接状态.结果[项目[0]].标准输出)
这是我的剧本:
- name: "Get Smart Link status"
shell: "{{ssh_command}} show network {{network_name}}_
我正在从事一个使用ansible进行部署的项目,我想用VST创建持续集成流
我已经创建了一个shell脚本:
apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible
if [ -z "$1" ]; then
echo "usage: $0 [target [tag [playbook]]]"
echo
我正在尝试从ansible中的主机列表生成一对主机
我有以下清单
[webs]
test
test2
test3
test4
test5
如何生成主机对,例如test和test2、test3和test4、test5和test(从第一个开始重复)
我尝试过像批处理、切片和带有_项的过滤器,但似乎不起作用
有没有一种简单的方法可以在ansible中生成这些对?您可以进一步优化它
tasks:
- set_fact: total_hosts={{groups['webs'] | length
我写了一本Ansible剧本,创建了多个虚拟机。剧本分成两个文件。Main.yaml和vars.yaml。它正在创建虚拟机,而且似乎工作得很好。我没有收到任何错误,所以我假设它成功地将创建的主机添加到资源清册中。我想检查是否已将创建的主机添加到资源清册中。如何打印/列出清单的主机?我的目标是在稍后阶段在创建的VM上运行脚本。谢谢
**Main.yaml**
#########CREATING VM#########
---
- hosts: localhost
vars:
http_
Ansible 2.7,服务器和目标运行ubuntu
在我的剧本中,我有一个用户目录:
ok: [virtual_tournesol] => {
"users": [
{
"key": "toto",
"value": [
"toto",
"/home/toto/.ssh/id_rsa"
]
},
{
"key": "riri",
"val
如何在playbook中执行多个任务时将每个输出存储在一个文件中?
1.我想将每个输出存储在一个文件中
2.在剧本中也有不同的任务。
3.我希望以增量方式存储playbook执行的输出 将每个任务输出存储到变量,然后写入文件。
只是在下面给出一个想法,没有经过测试
- name: Task1
...
register: task_output1
- name: Task2
...
register: task_output2
- name: Write to file
cop
我想在主机上启动多个返回json的python脚本,最后得到一个json摘要:
{'server1': {script1_label: { stdout },
script2_label: { stdout }
},
'server2': {script1_label: { stdout },
script2_label: { stdout }
},
}
stdout是每个python脚本
如果Ansible控制服务器没有运行SSH守护程序,如何在该控制服务器上运行本地命令
如果我运行以下剧本:
- name: Test commands
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Test local action
local_action: command echo "hello world"
我得到以下错误:
fatal:[localhost]
我有样本列表,我想选择类型在通缉列表中的项目
- name: Get item based on anther list
vars:
samples:
- { item: 10, type: sample-1 },
- { item: 20, type: sample-11 },
- { item: 30, type: sample-2 }
wanted_list: [ sample-11, sample-2 ]
query: &
我们正在考虑使用AWX/Tower自动运行playbook,以执行初始配置,并确保库存中每个主机上的状态持续不变。这将通过两种方式实现自动化(不同的触发器):
机器设置完成后(由Foreman或Cobbler)的初始回调,即对AWX进行API调用(回调),以针对主机运行剧本并将其配置为可用
每个主机定期(可能每晚)运行playbook以确保状态
主机目前根据其预期用途进行分组,例如,我们有“基本”服务器、web服务器、samba服务器、台式机和许多其他服务器
对于任何给定类型/组的主机,我们希望
我想按顺序给变量赋值。第一次运行playbook时,我想将103分配给一个变量,下一次应该是104。我还需要确保指定的值不在列表中
变量:
list1:
- 100
- 101
- 102
val: 100
剧本:
- name: Set fact
set_fact:
val: "{{ val | int + 1 }}"
until: val not in list1
它尝试了三次,失败了,错误如下
失败-重试:设置xxx(剩
我运行playbooka.yaml,在a.yaml中,我想包含b.yaml中的一个或多个任务
首先,我尝试在a.yaml上添加以下内容:
import_playbook: b.yaml --tags "tag1"
- include_tasks:
file: b.yaml
apply:
tags: tag1
- shell: echo $HOSTNAME
register: hostname
tags: tag1
- debug:
标签: Ansible
ansible-factsansible-template
团队,我只想在sda设备上循环,不包括loop设备,所以我试图比较字符串的一部分,如果它存在于ansible_设备项变量的键中,并且卡在语法错误处
我只想在满足条件时在上打印消息。基本上,我只想在键中有子字符串loop时打印msg
我有下面的示例输出,我能够检索到它,但现在我想将它与一些字符串进行比较,但是失败了,如任务中标记的#fails
values.yml
loop_device: "loop"
task.yaml
debug:
msg: "{{
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 192 页