Questions tagged «ansible»

Ansible是用于配置和管理计算机的开源软件平台。它结合了多节点软件部署,临时任务执行和配置管理。

1
Ansible-通过堡垒进入带有MFA的堡垒
在当前环境中,我只能通过启用了MFA的堡垒主机访问所有Linux服务器。 我设法使Ansible通过堡垒成功地与服务器通信,唯一的问题是它为每个主机建立了到堡垒的新连接,这意味着我必须输入与服务器数量一样多的MFA密钥。艰难时期。:( 我已经尝试在ssh配置中弄乱这样的东西,以尝试使多路复用工作: Host bastion ControlMaster auto ControlPath ~/.ssh/ansible-%r@%h:%p ControlPersist 5m 不幸的是它似乎没有做到。任何人都获得了一些提示,说明如何阻止Ansible通过我的堡垒主机为它碰到的每个主机重新建立其连接? 谢谢!

2
如何在Ansible中加密二进制文件?
我们正在使用Ansible Vault在Ansible Playbook git存储库中存储密码,证书的私钥等。我们所有现有的私有数据都是文本形式的,因此我们可以将其存储在变量中。然后将它们用于模板或与content复制模块的参数一起使用。 现在,我们有一个Java KeyStore文件,可悲的是它具有二进制格式。因此,它不能存储在变量中-至少我不知道该怎么做。将文件保存在git中但在运行时可用,最简单的方法是对其进行正确加密ansible-playbook? 我已经尝试过但没有成功的东西: 在base64中对二进制文件进行编码,将编码后的数据存储在变量中,并使用带有的模板模块{{base64_data | b64decode}}。导致大量的EF BF BD十六进制转储结果文件。这三个字节对UTF-8中的Unicode替换字符进行编码,因此将二进制数据解释为文本存在问题。 在base64中对二进制文件进行编码,将编码后的数据存储在变量中,然后将复制模块与一起使用content="{{base64_data | b64decode}}"。Ansible抱怨“一个变量在模块args中插入了一个新参数”。当使用单引号而不是双引号时,Ansible抱怨“错误解析参数字符串”,并将所有二进制数据的副本转储到终端...
9 ansible 

2
Ansible:主机出现在多个组中,并且两个组中的任务相同;任何方式一次运行任务?
我有一本剧本,看起来像这样: --- - hosts: group1 roles: - role1 - role2 - hosts: group2 roles: - role2 - role3 现在说我有一个hosts文件,该文件具有这样的条目: [group1] host1.example.com [group2] host1.example.com Ansible将在host1.example.com的role2 TWICE中运行任务,因为它出现在2个组中,并且每个组都分配有role2。 我如何使Ansible意识到它具有两次包含的相同角色,因此应该只运行一次?
9 ansible 

2
即使给出了Sudo通行证,Ansible也无法验证Sudo
问题 使用最新的,稳定的Ansible构建,我遇到了一个奇怪的问题,即我的剧本在“ Gathering_Facts”期间挂在一台服务器上,但是在使用Sudo时在其他类似服务器上可以正常工作。在Ansible服务器上,我以用户(NIS用户)身份运行,并在远程服务器上使用sudo(以root 用户身份)进行更改。如果我从此设置中删除Sudo,则一切正常。 设定 软件版本 作业系统:RHEL 6.4 Ansible版本:Ansible 1.8.2 须藤版本: Sudo版本1.8.6p3 Sudoers策略插件版本1.8.6p3 Sudoers文件语法版本42 Sudoers I / O插件版本1.8.6p3 SSH版本:OpenSSH_5.3p1,OpenSSL 1.0.0-fips 2010年3月29日 服务器映射 -------- User1 @ Server1:sudo -H -S -p(挂在Gathering_Facts上) / User1 @ Ansible ---- \ -------- User1 @ Server2:sudo -H -S -p(工作正常) 用户数 User1:Server1和Server2上的NIS可访问用户。 root:每个服务器的本地root用户。 Ansible配置 我的ansible.cfg的相关部分。 ansible.cfg sudo = …
9 sudo  rhel6  ansible 

1
Ansible:根据主机名或角色复制文件
根据主机名复制文件的最佳方法是什么? 我需要将内容不同但文件名相同的文件复制到多台计算机上。 我有几个文件: file.role1 file.role2 file.role3 根据主机名和/或角色,我想file.roleX将其复制并重命名为file 谢谢。
9 ansible 

1
Ansible剧本中的关联数组
我正在尝试使用Ansible将用户添加到我的服务器中。每个用户都有一个不同的加密密码。 我有这样的事情: vars: users: - myuser1 - myuser2 password: encryptedpasswordhere tasks: - name: Creating users user: name={{ item }} password={{ password }} groups=sudo,adm shell=/bin/bash with_items: users 这很好用,但是所有用户都使用相同的密码。 我正在寻找一个关联数组。在PHP中,我可以这样做: $users = array('user'=>'myuser1', 'password'=>'encryptedpass1', 'user'=>'myuser2', 'password'=>'encryptedpass2', ); 在Ansible剧本中有办法做到这一点吗?
9 ansible 

2
使用复杂参数形式将自由格式命令传递给Ansible
我正在使用以编程方式生成的Ansible剧本。通常,因为剧本只是YAML,所以这很简单。但是,当使用“简单” key=value形式时,剧本不是纯粹的YAML,它们包含嵌入了shlex-parsable形式的内容。 为了避免这种形式的歧义(key=value将命令的参数与ansible的参数配对?),并且只有一种格式可以解析和生成,我无条件地使用ansible中的示例演示的复杂args机制-examples存储库。 这使用以下语法: action: module-name args: key1: value1 key2: value2 ...很好。但是,当尝试将这种形式用于shell或command模块时(其文档将实际命令描述为在名为的参数中传递free_form),因此效果不佳: action: shell args: free_form: echo hello_world >/tmp/something creates: /tmp/something 调用时,它将运行以下内容: /bin/sh -c " free_form='echo hello_world >/tmp/something' " ...这不是我要完成的任务。 使用Ansible模块通过纯YAML语法接受“自由格式”命令的正确方法是什么?
9 ansible 

3
在Ansible中,Puppet的“除非”是什么意思?
背景:在Puppet中,除非已执行命令,否则可以执行该命令: exec { '/bin/echo root >> /usr/lib/cron/cron.allow': path => '/usr/bin:/usr/sbin:/bin', unless => 'grep root /usr/lib/cron/cron.allow 2>/dev/null', } 目的:执行命令,除非该命令已在Ansible中运行 方法 任务/ main.yml - name: add vhost sensu command: rabbitmqctl add_vhost /sensu 结果 TASK [ansible-rabbitmq : add vhost sensu] ************************************** fatal: [111.222.333.444]: FAILED! => {"changed": true, "cmd": ["rabbitmqctl", "add_vhost", "/sensu"], "delta": "0:00:00.210140", …
9 ansible 

1
如何为组设置scp_if_ssh = True?
在ansible.cfg中设置此变量很简单,但仅对没有sftp的主机(以及最可能的python)有意义。所以我有一个路由器组–是否可以在group_vars中设置此变量?
9 ansible 

2
如果Ansible中不存在,则创建用户
我想确保给定用户始终存在于系统中,因此仅在不存在时才创建 我当前的任务是: - name: Create default user action: user name={{ user }} groups={{ group }} state=present 但是,如果用户已经存在,则会引发错误,那么如何避免用户帐户已经存在的错误呢?
9 ansible 

1
ansible运行全局变量
我想使用ansible创建服务器集群。 在一个主要剧本中,我包括一些子剧本。 - include: playbook_commandserver.yml - include: playbook_agent.yml 在playbook_commandserver.yml中,创建命令服务器(在AWS上)。然后,我触发一个角色,该角色使用该set_fact模块记住命令服务器的dns名称: - name: Get hostname of command server shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}' register: cs - name: Set hostname of command server as fact set_fact: commandserver="{{ cs.stdout }}" 该commandserver事实是在同一操作可用,但不是在同一个剧本..更何况是在playbook_agent.yml,这是包含,算账。正是在这里,我需要访问该commandserver-fact。 那么如何设置/存储一个对完整的ansible运行有效的变量? 我发现了这一点:https : …

1
Ansible难以重新启动Supervisor
我试图通过我的Ansible Playbook重新启动Supervisor,但似乎遇到了Ansible的超级用户模块问题。 在我的主管配置中,我定义了一个程序: [program:process] process_name=%(program_name)s_%(process_num)02d command=/home/box1/workers/bin/process numprocs=64 directory=/home/box1/workers/bin autostart=true autorestart=true startretries=5 stderr_logfile=/tmp/%(program_name)s-err.log stdout_logfile=/tmp/%(program_name)s-out.log user=root 这很好。但是,当我尝试通过Ansible重新启动Supervisor时,出现以下错误: failed: [box1] => {"failed": true} msg: program:process: ERROR (no such process) program:process: ERROR (no such process) 我的Ansible任务配置如下所示: - name: Restart Supervisor sudo: yes supervisorctl: name=program:process state=restarted config=/etc/supervisor/supervisord.conf 对于name参数我都试过program:process,program,program:和process,但似乎没有工作。我目前正在使用Ansible 1.5.4。

2
快速捕获模板输出
我需要在目标服务器上运行仅通过stdin接受数据的命令。我要提供的数据来自模板文件,其中包含敏感数据,因此我宁愿不要将其放置在文件系统中一秒钟。 我正在尝试寻找一种方法来获取模板任务的输出,以便将其传递给命令。就像是: - name: generate data template: src: data.j2 dest: [I'd rather not have any files written] register: myvar - name: run command shell: "command < {{ myvar }}" 有更好的方法来解决此问题,而无需编写临时文件,将其提供给命令然后进行擦除吗?
8 ansible 

1
作为用户和执行者的Ansible ssh具有root(期望像)
我必须管理大量的主机,其中只有一个用户能够从SSH访问(我们称他为foo),然后必须以root用户身份登录才能执行特权命令。 Foo用户没有任何类型的sudo特权,因此我被迫以root用户身份登录以执行特权命令。我实际上是使用Expect脚本来完成这项工作(ssh登录为foo,通过su登录为root),我想切换到Ansible。我知道我可以创建一个新用户并向他授予sudo特权,或者基本上给foo赋予sudo特权,但是使用Ansible是否可以完成与期望相同的操作? 我想以foo的形式进行ssh连接,然后以root身份执行剧本或任何类型的adhoc命令。我没有在Ansible文档中找到任何有关此的信息,所以我在这里问是否有人已经进行过这种询问。
8 sudo  root  ansible  expect 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.