2016-12-10 13 views
1

我写了一本安装Docker的剧本。如何强制在Vagrant机器上运行剧本?

--- 

- name: Install dependencies 
    apt: name={{ item }} state=present update_cache=yes 
    with_items: 
    - linux-image-generic-lts-{{ ansible_distribution_release }} 
    - linux-headers-generic-lts-{{ ansible_distribution_release }} 
    become: true 

- name: Add Docker repository key 
    apt_key: 
    id: 58118E89F3A912897C070ADBF76221572C52609D 
    keyserver: hkp://p80.pool.sks-keyservers.net:80 
    state: present 
    register: add_repository_key 
    become: true 

- name: Add Docker repository 
    apt_repository: 
    repo: 'deb https://apt.dockerproject.org/repo {{ ansible_distribution_release }} main' 
    state: present 
    become: true 

- name: Install Docker 
    apt: 
    name: docker 
    state: latest 
    update_cache: yes 
    become: true 

- name: Verify the service is running 
    service: 
    name: docker 
    enabled: yes 
    state: started 
    become: true 

我在配置使用该剧本的流浪者机器。

Vagrantfile:

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

VAGRANTFILE_API_VERSION = "2" 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "ubuntu/trusty64" 
    config.ssh.insert_key = false 
    config.vm.synced_folder "./", "/tmp/project",create: true 
    config.vm.network :forwarded_port, guest: 80, host: 80 , auto_correct: true 

    config.vm.provider :virtualbox do |v| 
    # Name of machine 
    v.name = "default" 
    # Machine memory 
    v.memory = 1024 
    # Number of cpu's 
    v.cpus = 2 
    # This option makes the NAT engine use the host's resolver mechanisms to handle DNS requests 
    v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] 
    # Enabling the I/O APIC is required for 64-bit guest operating systems; it is also required if you want to use more than one virtual CPU in a virtual machine. 
    v.customize ["modifyvm", :id, "--ioapic", "on"] 
    end 

    config.vm.provision "ansible" do |ansible| 
    # Sets the playbook to use when machine is up'ed 
    ansible.playbook = "deploy/main.yml" 
    end 

end 

但由于某些原因,这就是输出I get和码头工人没有流浪机器上安装:

$ vagrant up --provision 
Bringing machine 'default' up with 'virtualbox' provider... 
==> default: Checking if box 'ubuntu/trusty64' is up to date... 
==> default: Running provisioner: ansible... 
    default: Running ansible-playbook... 

PLAY RECAP ********************************************************************* 

这是做到这一点的正确方法?

是否有一个命令可以让我在正在运行的Vagrant机器上播放剧本?

回答

2

我写了一本安装docker的剧本。

--- 
- name: Install dependencies 
    apt: name={{ item }} state=present update_cache=yes 
    with_items: 
    - linux-image-generic-lts-{{ ansible_distribution_release }} 
    - linux-headers-generic-lts-{{ ansible_distribution_release }} 
    become: true 

不,你没有写一个剧本。您已经编写了一个包含Ansible任务列表的YAML文件。

Playbooks包含剧目列表,而剧本是YAML字典,对于Ansible来说,至少必须包含hosts键。在典型的剧本中,任务列表在tasks键中定义。

因此,对于你的文件是一个剧本,你会至少需要:default这里指的是在您的Vagrantfile(v.name = "default")中定义的计算机的名称没有什么Ansible:

- hosts: default 

    tasks: 
    - name: Install dependencies 
     apt: name={{ item }} state=present update_cache=yes 
     with_items: 
     - linux-image-generic-lts-{{ ansible_distribution_release }} 
     - linux-headers-generic-lts-{{ ansible_distribution_release }} 
     become: true 

注意 -默认。


有没有可以让我发挥的剧本正在运行的流浪机器上的命令?

可以运行在流浪文件中定义与剧本:

vagrant provision 

要运行一个又一个,你只需要使用ansible-playbook,但你必须指向流浪的清单文件,还必须使用vagrant作为remote_user

ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory playbook.yml 
相关问题