我是Ansible的新手,但是很长一段时间的程序员,也和puppet一起工作了一下。 这是情况,我需要初始化一些networking设备,他们不会说bash,所以我使用的是原始模块,到目前为止,在这方面一切都很好。 但是我有问题获得不同的命令在不同的主机上运行。 我可能有一个可变数量的主机来设置主机名,从1到N,其中N在10以下。主机名前缀总是像prefix_一样 。 我想从列表中添加一个后缀: ctr_suffixes: "[ 'A', 'B', 'C', 'D', 'E'] suffix_list应该总是有足够的元素来提供一个唯一的后缀(例如,一个大小为10的列表将提供从1到10个指定主机的后缀,但是如果只指定了3个,那么A,B,C将被使用,但不会被使用。 所以,如果我的库存中有3台主机,我想创build一个可以产生以下主机名的操作手册 prefix_A prefix_B prefix_C 需要在每个主机上运行的命令是 set hostname prefix_{{item}} 其中{{item}}应该填入第一个主机的A,第二个主机的B,等等。 不幸的是,我尝试过的所有东西都会在每个库存主机上应用set hostname命令,最后所有的主机都会被命名为prefix_C 到目前为止,这是不正确的: — – hosts: controllers_test gather_facts: no remote_user: admin vars: # ctr_suffixes: [ 'A', 'B', 'C', 'D', 'E' ] ctr_suffixes: [ 'A', 'B'] tasks: – name: Assign names to the […]
我刚开始学习Ansible的基础知识,并查找了为什么我得到上述错误,但无法弄清楚如何整理出来。 这是一个痕迹: Me-Air:ansible me$ ansible all -m ping -vvv Using /private/etc/ansible/ansible.cfg as config file <Public_IP> ESTABLISH SSH CONNECTION FOR USER: [my_user_name_on_EC2_instance] <Public_IP> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/Users/me/.ansible/cp/ansible-ssh-%h-%p-%r -tt [Public_IP] '/bin/sh -c '"'"'( umask 22 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-… `" […]
我知道可以通过如下所示的行将任务/处理程序文件包含在其他类似的文件中 – name: Configure django include: django.yml – name: Configure nginx reverse proxy include: nginx.yml 但根据文档 ,似乎这个function存在于vars/或defaults/下的文件。 我面临的问题是,我有很多variables,从根本上修改angular色的不同方面,但所有的variables只是在同一个文件( defaults/main.yml )使用注释分成不同的部分(例如# BEGIN RoR config vars … # END RoR config vars )。 这是非常丑陋和笨拙的,但更重要的是它不是模块化的,它使得维护更困难。 编辑:由于有人投票closures,因为他们觉得这不清楚… 这与我所拥有的类似(全部在一个文件中): ## Database variables database: user: bob pass: bobs_pass host: dbhost ## Server variable server: su_user: nobody max_connections: 50 给予ls -R输出: ./defaults/main.yml […]
有许多自动化任务的远程工具,如puppet或ansible 我的目标是在Linux机器上执行许多远程任务,如下所示: 运行Linux命令块, 将主机中的文件复制到远程Linux机器上 在远程Linux机器上运行脚本 等等
我正开始玩耍。 我有一堆服务器(Ubuntu,Centos,红帽子…)。 服务器有不同的用户。 对于使用sudo用户的ubuntu服务器,其余的我使用root用户。 我怎么能通过操作系统指定用户?
我正在更新我的一些可靠的手册,以运行最新版本的Fedora,现在默认使用dnf 。 由于我的大多数剧本都应该在CentOS上运行, 所以我希望我的脚本在运行CentOS机器时运行ansible yum命令,并且在运行Fedora时运行dnf命令(在Ansible 1.9中是新的)的作用是。 换句话说,我想编写一个能够智能地select右命令的操作(类似于): – name: Install zsh sudo: yes yum|dnf: name=zsh state=latest …而不是复制粘贴相同的命令两次,用dnfreplaceyum中的一个,然后实现一些逻辑,说明两个不同的angular色之一运行: – name: Install zsh (yum version) sudo: yes yum: name=zsh state=latest – name: Install zsh (dnf version) sudo: yes dnf: name=zsh state=latest 在有人匆匆忙忙之前: 我知道在最新的Fedora中有一个dnf的别名,而且我可以直接离开剧本 …我的问题不是关于编写与CentOS / Fedora兼容的剧本,我的问题是关于根据目标环境select相同参数的不同命令
作为标题,在root上运行所有的东西似乎并不安全,特别是当playbook服务器被黑掉,并且可能ssh进入Ansible主机列表中的任何机器时,这个安全问题的解决scheme是什么?
我目前正在为Ubuntu创build一个通用的有用的剧本。 在强化过程中,我禁用root用户,并创build一个新的sudo用户来运行未来的剧本(称为ansible )。 我第一次运行这个剧本,我有一个ansible_ssh_user设置为root ,第二次我必须手动将ansible_ssh_user var更改为ansible_ssh_user 。 有没有一种方法可以跟踪哪些主机已完成此步骤,并与新创build的ansible用户连接,甚至可以回ansible第二次用户名尝试。 如果可能的话,我希望这个过程是无人看pipe的。 编辑:我试图纠正用户build立一个新的连接。 例如。 我运行了一个服务器的强化剧本。 现在我想运行它来提供一个新的服务器,并对现有的服务器进行一些更新。 所以我有两个用户名root和ansible。 我想脚本来尝试两个,而不是设置一个主机variables,主机variables我唯一的select在这里?
我正在使用Ansible在EC2 / Ubuntu实例上创buildpm2服务。 以下是脚本。 当我运行它时,PM2被安装并且服务被启用。 当我运行pm2列表时,我没有看到服务,但我可以grep它(ps aux | grep节点),看看它正在运行。 它也似乎是pm2的影子副本正在运行和加载应用程序,但我似乎无法控制它。 – 主机:通信 sudo:是的 任务: – npm:name = pm2 global = yes – name:configurationpm2在启动时重新启动 shell:pm2 startup ubuntu>&/ dev / null chdir =〜/ executable = / bin / bash sudo:是的 sudo_user:root – 命令:sudo env PATH = $ PATH:/ usr / bin pm2启动ubuntu -u ubuntu sudo:是的 – 命令:/ […]
是否有可能使用dynamic库存为所有主机定义主机variables? 目前我可以生成一个清单,允许我将variables分配给特定的主机,但是我想实现的是这样的: { "_meta": { "hostvars": { "all": { "my_global_random_variable": "global_random_value" } } }, "web_servers": { "children": [], "hosts": [ "web_server1", "web_server2" ], "vars": {} }, "database_servers": { "children": [], "hosts": [ "database_server1" ], "vars": {} } } 这应该允许我从任何上下文访问“my_global_random_variable”,就好像我将在variables文件中定义该variables一样。