标签: ansible-inventory

Ansible:库存中的ansible_user和playbook中的remote_user

我正在尝试使用除我登录控制计算机之外的帐户对服务器运行Ansible playbook.我尝试ansible_user根据Inventory上的文档在库存文件中指定一个:

[srv1]
192.168.1.146 ansible_connection=ssh ansible_user=user1
Run Code Online (Sandbox Code Playgroud)

然而Ansible调用ansible-playbook -i inventory playbook.yml -vvvv打印以下内容:

GATHERING FACTS ***************************************************************
<192.168.1.146> ESTABLISH CONNECTION FOR USER: techraf
Run Code Online (Sandbox Code Playgroud)

对我remote_user有用的是在剧本中加入论点:

- hosts: srv1
  remote_user: user1
Run Code Online (Sandbox Code Playgroud)

现在,相同的Ansible命令连接为user1:

GATHERING FACTS ***************************************************************
<192.168.1.146> ESTABLISH CONNECTION FOR USER: user1
Run Code Online (Sandbox Code Playgroud)

同时添加remote_user变量ansible.cfg使Ansible使用目标用户而不是登录用户.

ansible_user库存文件和remote_user剧本/ ansible.cfg用于不同目的?

什么是ansible_user干什么用的?或者为什么Ansible没有观察清单中的设置?

ansible ansible-2.x ansible-inventory

17
推荐指数
2
解决办法
3万
查看次数

Ansible配置错误!无法使用SSH密码而不是密钥

我想通过使用Ansible来配置我最后一个节点的三个节点.

我的主机是Windows 10.

我的Vagrantfile看起来像:

Vagrant.configure("2") do |config|

  (1..3).each do |index|
    config.vm.define "node#{index}" do |node|

      node.vm.box = "ubuntu"
      node.vm.box = "../boxes/ubuntu_base.box"

      node.vm.network :private_network, ip: "192.168.10.#{10 + index}"

      if index == 3
        node.vm.provision :setup, type: :ansible_local do |ansible|
          ansible.playbook = "playbook.yml"
          ansible.provisioning_path = "/vagrant/ansible"
          ansible.inventory_path = "/vagrant/ansible/hosts"
          ansible.limit = :all
          ansible.install_mode = :pip
          ansible.version = "2.0"
        end
      end

    end
  end

end
Run Code Online (Sandbox Code Playgroud)

我的剧本看起来像:

---

# my little playbook

- name: My little playbook
  hosts: webservers
  gather_facts: false
  roles:
    - create_user
Run Code Online (Sandbox Code Playgroud)

我的主机文件看起来像:

[webservers]
192.168.10.11 …
Run Code Online (Sandbox Code Playgroud)

ssh vagrant ansible ansible-inventory

11
推荐指数
7
解决办法
4万
查看次数

Ansible EC2动态库存最小IAM策略

已经有人想出运行EC2动态库存脚本(所需的最小IAM策略ec2.py上)ansible通过IAM角色?

到目前为止,除了boto在ansible的官方文档中指定库的凭据之外,我还没有看到这个问题的具体参考,但是,在生产环境中,我很少使用密钥对从EC2实例访问AWS服务,而是我有在这种情况下接受了IAM角色的使用.

我已经尝试过允许ec2:Describe*操作的策略,但对于脚本来说似乎不够,因为它总是会退出Unauthorized operation.

你能救我吗?

amazon-ec2 amazon-iam ansible ansible-inventory

10
推荐指数
2
解决办法
3218
查看次数

如何在ansible的主机文件中指定用户名

我正在使用如下的主机文件,

[qa-workstations]
10.39.19.190 ansible_user=test ansible_ssh_pass=test
Run Code Online (Sandbox Code Playgroud)

我使用下面的命令在主机中执行"whoami"命令

root@Svr:~/ansible# ansible all -a "whoami" -i /etc/ansible/host
10.39.19.190 | success | rc=0 >>
root
Run Code Online (Sandbox Code Playgroud)

默认情况下,ansible尝试使用我已登录的用户名,即root而不是我在主机文件中指定的测试用户

当我尝试在ansible cli命令中传递用户名时,它工作正常

root@Svr:~/ansible# ansible all -a "whoami" -i /etc/ansible/host -u test
10.39.19.190 | success | rc=0 >>
test
Run Code Online (Sandbox Code Playgroud)

但是我不可能每次在CLI中传递用户名,因为不同的主机使用不同的用户名.此外,我没有为每个主机生成密钥对,因为主机经常不断更改

使用版本:

 ansible 1.5.4 
 Ubuntu 14.04 LTS
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook ansible-inventory

10
推荐指数
2
解决办法
2万
查看次数

你如何在ansible中获得执行角色的组名

我有一个用例,我需要在一个组中的所有主机中创建一个目录,该目录的名称将是该组的名称。

例如:我创建了一个动态清单文件,输出形式如下:

{
   "db": ["host1", "host2", "host3"],
   "logs": ["host2"],
   "misc": ["host4"]
}
Run Code Online (Sandbox Code Playgroud)

我需要在组 db 的每个主机中创建一个名为 db 的目录,并在组日志的每个主机中创建一个名为 log 的目录。

到目前为止,我的剧本看起来像:

- hosts: db
  tasks:
  - name: create db directory
    file: path=db state=directory

- hosts: logs
  tasks:
  - name: create logs directory
    file: path=logs state=directory
Run Code Online (Sandbox Code Playgroud)

组数至少为 10+。这在未来可能会增长。我想为未来的团队编写一些易于扩展和管理的东西。

我读到 ansible 没有为任务的组名提供默认事实或变量。我发现如果我在主机中提供一个像 groupname 这样的变量,这是最好的。

有没有更好的解决方案可以使用循环而不是重复相同的任务?

ansible ansible-inventory

10
推荐指数
1
解决办法
3万
查看次数

如何在Ansible中提示用户使用目标主机?

我想为Ansible中的新机器编写一个bootstrapper playbook,它将重新配置网络设置.在第一次执行时,目标机器将具有DHCP分配的地址.

应该执行该剧本的用户知道所分配的新机器的IP地址.我想提示用户是值.

vars_prompt模块允许从用户获取输入,但是在hosts有效防止主机地址作为所需值的部分下定义.

是否可以不使用修改库存文件的包装脚本?

ansible ansible-inventory

9
推荐指数
3
解决办法
2万
查看次数

如何让Ansible playbook在组中的第一个主机上运行?

如何仅在组中的第一个主机上运行playbook?

我期待这样的事情:

---
- name: playbook that only run on first host in the group
  hosts: "{{ groups[group_name] | first }}"

  tasks:
   - debug:
       msg: "on {{ inventory_hostname }}"
Run Code Online (Sandbox Code Playgroud)

但这不起作用,给出错误:

'groups'未定义

我怎样才能使它工作?

ansible ansible-inventory

9
推荐指数
1
解决办法
1万
查看次数

Ansible:在剧本中指定清单文件

因此,根据我收集的信息,我们可以使用 ansible.cfg 来设置 ansible 在运行剧本时查找的默认清单文件。

我们还可以在通过命令行运行 ansible playbook 时使用 -i 参数覆盖该清单。

有没有办法让我在不使用命令行或更改 ansible.cfg 文件的情况下在剧本中指定特定的特殊清单文件?

ansible ansible-facts ansible-inventory

9
推荐指数
1
解决办法
3912
查看次数

如何在执行剧本时在命令行中添加多个清单文件

我有一本包含两种不同剧本的剧本

Sample.yml
    - name : Play1
      hosts: Host1
      tasks:
       ...
    - name: Play2
      hosts: Host2
      tasks:
       ...
Run Code Online (Sandbox Code Playgroud)

我需要用两个不同的主机(Host1 和 Host2)运行这个剧本,这两个不同的主机存在于库存/目录下的两个单独的文件(Hostfile1 和 Hostfile2)中。

inventory/
   Hostfile1
   Hostfile2
   .
   .
   HostfileN
Run Code Online (Sandbox Code Playgroud)

我想知道如何在运行剧本时包含两个不同的主机文件。我知道通过在命令行中包含整个文件夹(库存/)我们可以实现这一点,但我在库存/ 文件夹中有很多主机文件,因此此选项将加载未使用的主机文件。

我试着像下面一样运行

ansible-playbook -i inventory/Hostfile1,Hostfile2 sample.yml
Run Code Online (Sandbox Code Playgroud)

但这没有用。那么,有谁知道如何通过在命令行中提供多个主机文件来运行剧本?

ansible ansible-2.x ansible-inventory

9
推荐指数
2
解决办法
9844
查看次数

如何在ansible库存文件中定义hash(dict)?

我能够在group_vars/all中定义如下所示的哈希(dict):

region_subnet_matrix:
  site1:
    region: "{{ aws_region }}"
    subnet: "subnet-xxxxxxx"
    zone: "{{aws_region}}a"
  site2:
    region: "{{ aws_region }}"
    subnet: "subnet-xxxxxxx"
    zone: "{{aws_region}}b"
Run Code Online (Sandbox Code Playgroud)

但对于我的生活,我无法弄清楚如何在hosts文件下定义它

[all:vars]
region_subnet_matrix="{
  site1:
    region: "{{ aws_region }}"
    subnet: "subnet-xxxxxxx"
    zone: "{{aws_region}}a"
  site2:
    region: "{{ aws_region }}"
    subnet: "subnet-xxxxxxx"
    zone: "{{aws_region}}b"
}"
Run Code Online (Sandbox Code Playgroud)

我知道这是不正确的,但我不知道正确的方法.有人可以开导我吗?

ansible ansible-inventory

8
推荐指数
2
解决办法
1万
查看次数