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 用法个人实例 查看指定端口流量 (伪)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章