Ansible-20190219-搬移公網資源到私網資源池

Intro

猶豫再三要不要寫這麼沒有技術含量的博客,然後還是覺得爲了工作閉環,小記一下。
使用的情景是從公網遷移資源到私網本地環境。調用接口放在了 Ansible Tower 中,需要填入關於公網資源的信息等,後臺會下載公網資源,然後上傳到私網環境的資源池 Artifactory。爲了今後下載的話,私網環境畢竟是相對比較快的。

調用接口

# 需要修改以下:
# 1. artifactory_url: 私網資源池路徑(請確保對該路徑有寫權限)
# 2. curl_url: 公網資源路徑
# 3. target_file: 目標資源名稱及臨時保存的資源名稱
# 4. target_path: 私網資源池子路徑(請確保對該路徑有寫權限)
artifactory_url: 'https://xx.xx.com'
curl_url: >-
  https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64
target_file: docker-compose-Linux-x86_64
target_path: more
vault_id: vault_id

實現代碼

用戶名/密碼這兩個值,我用 ansible-vault create vault.yml; ansible edit vault.yml 封裝在 vault 裏,提高了安全性,當然也就會有一些關於便捷性受損的考量。不過,這點還是要看實際的應用需求想做到哪一步。


# 入口

---
- name: curl public large files and transfer to artifactory
  hosts: x.x.x.x
  gather_facts: false
  become: yes
  become_method: sudo
  become_user: root
  roles:
    - curl_transfer_artifactory


# roles svc: curl files on public to artifactory

---
- name: curl to localhost
  get_url:
    url: "{{ curl_url }}"
    dest: /tmp/{{ target_file }}
    mode: 0644
    timeout: 86400

- name: upload to artifactory
  shell: curl -u "{{ username }}:{{ password }}" -T /tmp/{{ target_file }} "{{ artifactory_url }}/{{ target_path }}/{{ target_file }}"

- name: delete tmp files
  shell: rm -rf /tmp/{{ target_file }}
  when: target_file is defined

補充

在使用過程中,因爲 Ansible Tower 是搭載在 Docker 環境中的,所以有一些獨特的地方可以小記一下。作爲本腳本運行的機器節點若選擇 localhost,就會被下載到 /var/lib/docker/ 的一個掛載目錄下,這其實是會影響後續上傳的,所以 hosts 最好寫實際的 ip 地址
同樣,想要看實時的下載情況,用 ps -ef |grep curl 是看不到的,最好的解決方法就是看對公網的端口流量,這裏用到了 iftop 這個工具。

進一步

其實還有一些我能想到的遺留問題,一個是執行下載的節點硬盤容量判斷:如果已經資源大於硬盤容量,就提醒用戶或者分配其他資源,df -h;還有,資源緩衝池如果已經有了這個資源(通過 checksum 判斷),那麼就跳過下載,直接提示用戶已經有了這個資源,不需要重複下載再上傳。

Reference

  1. get_url – Downloads files from HTTP, HTTPS, or FTP to node
  2. iftop 用法個人實例 查看指定端口流量 (僞)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章