Где хранить хост-файл Ansible в Mac OS X

Я пытаюсь начать работу с Ansible для подготовки своего Vagrantbox, но не могу понять, как работать с файлами хоста.

Согласно документации, он должен храниться в /etc/ansible/hosts, но я не могу найти его в своей системе (Mac OS X). Я также видел примеры, когда файл host.ini находился в корне документа рядом с бродячим файлом.

Итак, мой вопрос: где бы вы сохранили свой хост-файл для настройки одного бродячего ящика?


person StenW    schedule 22.02.2014    source источник


Ответы (6)


Хотя Ansible попытается использовать /etc/ansible/hosts по умолчанию, существует несколько способов сообщить ansible, где искать альтернативный файл инвентаризации:

  • используйте переключатель командной строки -i и укажите путь к файлу инвентаря
  • добавьте inventory = path_to_hostfile в раздел [defaults] вашего ~/.ansible.cfg файла конфигурации
  • используйте export ANSIBLE_HOSTS=path_to_hostfile, как предложил DomaNitro в его ответе

Теперь вы не упоминаете, хотите ли вы использовать ansible provisionner, доступный в vagrant, или если вы хотите настроить свой бродячий хост вручную.

Давайте сначала перейдем к Vagrant ansible provisionner:

Создайте каталог (например, test) и создайте внутри файл Vagrant:

Бродячий файл:

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

  config.vm.box = "precise64-v1.2"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.define :webapp do |webapp|
    webapp.vm.hostname = "webapp.local"
    webapp.vm.network :private_network, ip: "192.168.123.2"
    webapp.vm.provider "virtualbox" do |v|
      v.customize ["modifyvm", :id, "--memory", 200, "--name", "vagrant-docs", "--natdnshostresolver1", "on"]
    end
  end

  # 
  # Provisionning
  #
  config.vm.provision :ansible do |ansible|
    ansible.playbook = "provision.yml"
    ansible.inventory_path = "hosts"
    ansible.sudo = true
    #
    # Use anible.tags if you want to restrict what `vagrant provision`
    # Here is a list of possible tags
    # ansible.tags = "foo bar"
    #
    # Use ansible.verbose to see detailled output for ansible runs
    # ansible.verbose = 'vvv'
    #
    # Customize your stuff here
    ansible.extra_vars = { 
      some_var: 42,
      foo: "bar",
    }
  end
end

Теперь, когда вы запускаете vagrant up (или vagrant provision), ansible provionner Vangrant будет искать файл с именем hosts в том же каталоге, что и Vagrantfile, и попытается применить плейбук provision.yml.

Вы также можете запустить его вручную, не прибегая к помощи Vagrant'а:

ansible-playbook -i hosts provision.yml --ask-pass --sudo

Обратите внимание, что трио Vagrant+Virtualbox+Ansible не всегда хорошо ладит. Есть некоторые комбинации версий, которые проблематичны. Попробуйте обновиться до последних версий, если у вас возникли проблемы (особенно с сетью).

{shameless_plug} Вы можете найти более подробный пример смешивания vagrant и ansible здесь { /бесстыдный_штекер}

Удачи !

person leucos    schedule 22.02.2014
comment
Для более поздних читателей: hostfile устарел, используйте вместо него inventory. - person kaiser; 03.01.2016

Если вы использовали Brew для установки Ansible, вы, скорее всего, найдете файл hosts по умолчанию в /usr/local/etc/ansible/hosts. Но, как указывали другие, вы можете просто изменить значение по умолчанию.

person counterbeing    schedule 13.08.2014
comment
Спасибо. Мне пришлось создать каталог /usr/local/etc/ansible/ и поместить в него файл hosts, в отличие от Linux. - person vikas027; 07.02.2016
comment
@counter ведет себя так же, если вы установили через macports. Вы можете сделать симлинк, хотя - person Buzut; 23.03.2016
comment
где это, если вы установили его через pip? docs.ansible.com/ansible/ - person Harry Moreno; 09.01.2017
comment
Я закончил тем, что указал файл hosts с флагом -i, поскольку я только учусь - person Harry Moreno; 10.01.2017

Мне нравится использовать переменные среды bash, поскольку мой базовый проект используется совместно с другими пользователями. вы можете просто export ANSIBLE_HOSTS=/pathTo/inventory/ это может быть хост-файл или каталог с несколькими файлами.

Вы также можете использовать запись в своем ~/.bash_profile, чтобы он оставался постоянным. Множество других переменных можно установить таким образом вместо сохранения файла conf для получения дополнительной информации, проверьте источник в ansible/lib/ansible/constants.py

person DomaNitro    schedule 26.02.2014

Если вы используете ansible provisioner Vagrant, Vagrant автоматически сгенерирует файл хостов Ansible (называемый vagrant_ansible_inventory_default) и настроит ansible-playbook для использования этого файла. Это выглядит так:

# Generated by Vagrant

default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

Он называет хост Vagrant «по умолчанию», поэтому ваши игры должны относиться либо к «по умолчанию», либо к «всем».

person Lorin Hochstein    schedule 23.02.2014

Вот описание того, что делать после установки Ansible на Mac, у меня это сработало: ansible-tips-and-tricks.readthedocs.io

Я скачал файл ansible.cfg на

/Users/"yourUser"/.ansible

и после этого вы можете отредактировать файл ansible.cfg, раскомментировав

inventory      = /Users/"yourUser"/.ansible 

строку и указав путь к доступной папке, как показано выше. Вы также можете создать файл hosts в этой папке. Чтобы попробовать его локально, вы можете поставить

localhost              ansible_connection=local

в файле hosts и попробуйте

ansible -m ping all
person Jan Clemens Stoffregen    schedule 05.01.2018

На Mac я использовал sudo find / -type d -name "ansible" 2> /dev/null, чтобы найти его, но у меня нет папки .../ansible/hosts из коробки, возможно, потому, что я установил, используя brew, как я читал выше, поэтому я создал в path/etc/ansible/hosts

person Serg Smyk    schedule 31.07.2020