فهرست منبع

add support for arbitrary downloads

Grega Bremec 1 سال پیش
والد
کامیت
9a190ea523
2فایلهای تغییر یافته به همراه26 افزوده شده و 14 حذف شده
  1. 24 13
      roles/pull-files/tasks/sequence.yml
  2. 2 1
      roles/pull-files/vars/main.yml

+ 24 - 13
roles/pull-files/tasks/sequence.yml

@@ -14,7 +14,9 @@
     return_content: yes
     status_code: 200
   register: dl_cc
-  when: not (item.direct_download | default(true))
+  when:
+    - item.file_id is defined
+    - not (item.direct_download | default(true))
 
 - name: Store conf code as a fact
   set_fact:
@@ -25,14 +27,21 @@
   set_fact:
     src_url: "https://drive.google.com/uc?export=download&id={{ item.file_id }}"
   when:
+    - item.file_id is defined
     - dl_cc.content is not defined
     - item.direct_download | default(true)
 
-- name: Check if the target dir is already there
+- name: Use dict url field as src_url
+  set_fact:
+    src_url: "{{ item.url }}"
+  when:
+    - item.url is defined
+
+- name: Check if the target is already there
   ansible.builtin.stat:
-    path: "{{ item.target_dir }}"
-  register: targetdir
-  when: item.target_dir is defined
+    path: "{{ item.target_path }}"
+  register: target_stat
+  when: item.target_path is defined
 
 - name: Download the file
   get_url:
@@ -43,34 +52,36 @@
     checksum: "{{ item.checksum | default('') }}"
   when:
     - (src_url | default(None)) != None
-    - item.target_dir is not defined or (targetdir.stat is defined and not targetdir.stat.exists)
+    - item.target_path is not defined or (target_stat.stat is defined and not target_stat.stat.exists)
   register: downloaded
 
+# TODO: fix permissions on target dir (s2i /usr/local/bin)
 - name: Extract if so required
   become: yes
   unarchive:
     src: "{{ ansible_facts['user_dir'] }}/Downloads/{{ item.name }}"
     remote_src: yes
-    creates: "{{ item.extracted_dir }}"
+    creates: "{{ item.extracted_dir | default(item.target_path) }}"
     dest: "{{ item.extract_to | default('/') }}"
   register: extract_action
   when:
-    - item.extracted_dir is defined
+    - item.extract_to is defined
     - downloaded.changed
 
 - name: Rename wherever the archive extracted to whatever new name is required, if so
   become: yes
-  command: mv {{ item.extracted_dir }} {{ item.target_dir }}
+  command: mv {{ item.extracted_dir }} {{ item.target_path }}
   when:
-    - item.target_dir is defined
+    - item.extracted_dir is defined
+    - item.target_path is defined
     - extract_action is defined
     - extract_action.changed
 
 - name: Make sure bin is in PATH
   lineinfile:
     path: "{{ ansible_facts['user_dir'] }}/.bashrc"
-    line: 'PATH="${PATH}:{{ item.target_dir | default(item.extracted_dir) }}/bin"'
-    regexp: '^PATH=.*{{ item.target_dir | default(item.extracted_dir) }}/bin'
+    line: 'PATH="${PATH}:{{ item.target_path | default(item.extracted_dir) }}/bin"'
+    regexp: '^PATH=.*{{ item.target_path | default(item.extracted_dir) }}/bin'
     insertafter: "^# User specific environment$"
     state: present
   when:
@@ -90,7 +101,7 @@
   set_fact:
     dl_cc: !!null
     src_url: !!null
-    targetdir: !!null
+    target_stat: !!null
     downloaded: !!null
     extract_action: !!null
 ...

+ 2 - 1
roles/pull-files/vars/main.yml

@@ -2,10 +2,11 @@
 # Needs a list of files in the pull_files variable:
 # - name: filename.txt
 #   file_id: google-drive-id
+#   url: https://direct.url/to/file.txt
 #   checksum: sha256:xxxxxxxxxx
 #   extract_to: /opt
 #   extracted_dir: /opt/foobar
-#   target_dir: /opt/newname
+#   target_path: /opt/newname
 #   add_to_path: yes
 #   remove_after: yes
 #   direct_download: yes