2016-01-27 16 views
6

Rails uygulamasına sahibim Donder kapsayıcılarında Ansible ile konuşuyorum. (volumes_from dbdata ile) (docker volume create --name dbdata ile oluşturulan)Ansible ile 'docker volume create' çalıştırılsın mı?

  • Bir Docker hacim kabı
  • bir Postgres kabı
  • (postgres konteynere bağlanan) Raylar uygulaması konteyner
  • : Uygulamam şu ana kadar üç kaplan içerir

Dağıtım oynatma kitabım çalışıyor, ancak sunucuya SSH üzerinden docker volume create komutunu çalıştırmam gerekiyordu. Bunu Ansible üzerinden yapmayı çok isterim, bu yüzden uygulamanın yeni bir örneğini boş bir kapsayıcıya dağıtabilirim.

Ansible aracılığıyla docker volume create'u çalıştırmanın bir yolu var mı, yoksa başka bir yolu var mı? Ansible Docker modülü için dokümanlar kontrol ettim ancak henüz volume create'u desteklemiyor gibi görünmüyor. Bir şey özlemediğim sürece?

+0

yanıtlayıcı ' 'command' veya' shell' modülleri kullanılarak istenilen komutları çalıştırabilir, böylece her şey üzerinde çalışabilir komut satırı muhtemelen olasılıkla çalıştırılabilir. – larsks

+0

Evet, bunu düşündüm ama Docker modülünün kaplar için yaptığı gibi 'state = present' nasıl yapıldığını bilmiyordum. Aynı adla iki kez docker birimini çalıştırırsanız, ikincisi bir şey yapmayacaktır, çünkü birim zaten mevcut olacaktır. Hmmm! –

cevap

10

command modülünü kullanarak bir seçenek. hacim docker volume inspect kullanarak varsa

- hosts: localhost 
    tasks: 
    - name: check if myvolume exists 
     command: docker volume inspect myvolume 
     register: myvolume_exists 
     failed_when: false 

    - name: create myvolume 
     command: docker volume create --name myvolume 
     when: myvolume_exists|failed 

Biz ilk kontrol edin. Bu görevin sonucunu myvolume_exists değişkenine kaydederiz ve görevi başarısız olduğunda yalnızca birimi oluşturabiliriz. Artık liman işçisi çalıştırmak adamı sayfasından adlı birimleri oluşturmak için -v argüman kullanabilirsiniz

+0

Bu, harika çalışmalıdır. Teşekkür ederim! –

3

: Eğer bir isim sağlarsanız

, Docker bu isimde bir adlandırılmış hacmi oluşturur.

- name: Run mariadb 
    docker_container: 
     name: mariadb-container 
     image: mariadb 
     env: 
     MYSQL_ROOT_PASSWORD: "secret-password" 
     MYSQL_DATABASE: "db" 
     MYSQL_USER: "user" 
     MYSQL_PASSWORD: "password" 
     ports: 
     - "3306:3306" 
     volumes: 
     - mariadb-data:/var/lib/mysql 

mariadb-data otomatik docker tarafından oluşturulan bir adlandırılmış hacmi ise:

$ docker volume inspect mariadb-data 
[ 
    { 
     "Name": "mariadb-data", 
     "Driver": "local", 
     "Mountpoint": "/var/lib/docker/volumes/mariadb-data/_data", 
     "Labels": null, 
     "Scope": "local" 
    } 
]