web-dev-qa-db-ja.com

ディレクトリをコピーするためのAnsibleのベストプラクティス

私のプレイブックには

- name: Grab h5bp/server-configs-nginx
  git:  repo=https://github.com/h5bp/server-configs-nginx.git
        dest=/tmp/server-configs-nginx
        version="3db5d61f81d7229d12b89e0355629249a49ee4ac"
        force=yes

- name: Copy over h5bp configuration
  command: cp -r /tmp/server-configs-nginx/{{ item }} /etc/nginx/{{ item }}
  with_items:
    - "mime.types"
    - "h5bp/"

これにより、ansible-lintで警告が発生します。

[ANSIBLE0006] cp used in place of copy module
/Users/austinpray/Dropbox/DEV/opensauce/bedrock-ansible/roles/nginx/tasks/main.yml:0
Task/Handler: Copy over h5bp configuration

したがって、これは疑問を提起します:コマンドではなく、ansibleモジュールでこれを行うより良い方法はありますか?

19
Austin Pray

現在、commandが最適なオプションです。リモートからリモートへのオプションはありません。これについてのスレッドは次のとおりです。 リモートシステムでAnsibleタスクを使用してファイルを移動/名前変更する方法

他にもいくつかのオプションがあります。

  • fileモジュールを使用してシンボリックリンクを作成できます(srcpath、およびstate=link
  • ansibleサーバー上のリポジトリをチェックアウトしてから、copyを使用できます。これは、コードを展開するためのより一般的なモデルです。
  • commandを使用し続けることができますが、stat条件でラップして、一度だけ上書きされるようにします。これは、notifyを使用してnginxを再起動する場合に特に役立ちます。

最後に、「git by deploy」を実行しているように見えます。そのレポを「所有」していない場合、それが常に最良の選択であるとは限りません。特に。しかし、それは問題ないかもしれません-ほんの少しのコードの匂いです。

8
tedder42

synchronize modulemode='pull'で使用できます

- name: Copy over h5bp configuration
 synchronize: mode=pull src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }} 
 with_items:
   - "mime.types"
   - "h5bp/"

:リモートからリモートにコピーするには、同じコマンドを使用して、delegate_to(リモートソースとして)と現在のinventory_Host(リモートdestとして)を追加します

16
ant31

Ansible 2.0はremote_srcパラメーターをcopyモジュールにもたらします: http://docs.ansible.com/ansible/copy_module.html

今、あなたは次のようなことをする必要があります:

- name: Copy over h5bp configuration
  copy: src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }} remote_src=yes
  with_items:
    - "mime.types"
    - "h5bp"
7
PriceChild

別の方法は、フォルダーを圧縮してからunarchive ansibleモジュールを使用することです:

- name: copy your folder using a work around
  unarchive: src=your.Zip dest=/destinationfolder
  become: yes

これにより、コピー先にフォルダーが解凍されるので、フォルダーのコピーがあります;-)ですが、ターゲットマシンにnzipパッケージがあることを忘れないでください。

RHEL:

yum install unzip -y


Debian:

apt install unzip

5
  • コピー:src = {{item}} dest =/etc/fooapp/directory_mode = yes

ユーザーdirectory_modeフィールド。

0

With_fileglobを使用できます: http://docs.ansible.com/ansible/playbooks_loops.html#id4

# copy each file over that matches the given pattern
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
  with_fileglob:
    - /playbooks/files/fooapp/*
0
user3773243