diff --git a/.travis.yml b/.travis.yml index ecaadee..5ba1a83 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ before_install: - sudo -E ./scripts/install-docker.sh install: true script: - - make "${OS}" test + - travis_wait 60 make "${OS}" test notifications: email: false webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/defaults/main.yml b/defaults/main.yml index e5701c2..d4213ab 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,7 +1,7 @@ --- minecraft_server: minecraft minecraft_version: latest -minecraft_url: https://s3.amazonaws.com/Minecraft.Download/versions +minecraft_url: https://launcher.mojang.com/v1/objects minecraft_user: "{{ minecraft_server }}" minecraft_group: "{{ minecraft_server }}" minecraft_home: /srv/{{ minecraft_server }} diff --git a/tasks/download/fetch_version_download-curl.yml b/tasks/download/fetch_version_download-curl.yml new file mode 100644 index 0000000..ffc50d7 --- /dev/null +++ b/tasks/download/fetch_version_download-curl.yml @@ -0,0 +1,30 @@ +--- +- name: retrieve versions manifest + local_action: command curl {{ minecraft_version_manifest_url }} + register: minecraft_versions + +- name: find latest release version + set_fact: + minecraft_version: "{{(minecraft_versions.stdout | from_json).latest.release}}" + when: minecraft_version == "latest" + +- name: use the configured minecraft version number + set_fact: + minecraft_version: "{{minecraft_version}}" + when: minecraft_version != "latest" + +- name: extract version specific mainfest file + set_fact: + minecraft_version_manifest_url: "{{ (minecraft_versions.stdout | from_json).versions | selectattr('id','match', (minecraft_version|string) ) | map(attribute='url') | list | first }}" + +- debug: var=minecraft_version_manifest_url + +- name: retrieve version manifest + local_action: command curl {{ minecraft_version_manifest_url }} + register: minecraft_version_info + + +- name: "extract the download url from version manifest" + set_fact: + minecraft_server_download_url: "{{(minecraft_version_info.stdout | from_json).downloads.server.url}}" + minecraft_server_download_checksum: "sha1:{{(minecraft_version_info.stdout | from_json).downloads.server.sha1}}" diff --git a/tasks/download/fetch_version_download-uri.yml b/tasks/download/fetch_version_download-uri.yml new file mode 100644 index 0000000..81ba737 --- /dev/null +++ b/tasks/download/fetch_version_download-uri.yml @@ -0,0 +1,31 @@ +--- +- name: load version informations + uri: + url: "{{minecraft_version_manifest_url}}" + return_content: yes + register: minecraft_versions + +- name: find latest release version + set_fact: + minecraft_version: "{{minecraft_versions.json.latest.release}}" + when: minecraft_version == "latest" + +- name: use the configured minecraft version number + set_fact: + minecraft_version: "{{minecraft_version}}" + when: minecraft_version != "latest" + +- name: extract version specific mainfest file + set_fact: + minecraft_version_manifest_url: "{{ minecraft_versions.json.versions | selectattr('id','match', (minecraft_version|string) ) | map(attribute='url') | list | first }}" + +- name: Download the version specific mainfest file + uri: + url: "{{minecraft_version_manifest_url}}" + return_content: yes + register: minecraft_version_info + +- name: "extract the download url from version manifest" + set_fact: + minecraft_server_download_url: "{{minecraft_version_info.json.downloads.server.url}}" + minecraft_server_download_checksum: "sha1:{{minecraft_version_info.json.downloads.server.sha1}}" diff --git a/tasks/download/fetch_version_download.yml b/tasks/download/fetch_version_download.yml new file mode 100644 index 0000000..f6ee0a8 --- /dev/null +++ b/tasks/download/fetch_version_download.yml @@ -0,0 +1,8 @@ +--- +- name: fetch latest version using uri module + include: fetch_version_download-uri.yml + when: ansible_version.full is version_compare('2.0.2', '>=') + +- name: fetch latest version using curl + include: fetch_version_download-curl.yml + when: minecraft_server_download_url is not defined diff --git a/tasks/download/latest-curl.yml b/tasks/download/latest-curl.yml deleted file mode 100644 index e1b349c..0000000 --- a/tasks/download/latest-curl.yml +++ /dev/null @@ -1,7 +0,0 @@ -- name: retrieve version manifest - local_action: command curl {{ minecraft_version_manifest_url }} - register: version_manifest - -- name: find and set latest version - set_fact: - minecraft_version_latest: "{{ (version_manifest.stdout | from_json).latest.release }}" diff --git a/tasks/download/latest-uri.yml b/tasks/download/latest-uri.yml deleted file mode 100644 index 7be3c4c..0000000 --- a/tasks/download/latest-uri.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: retrieve version manifest - uri: - url: "{{ minecraft_version_manifest_url }}" - return_content: true - register: version_manifest - -- name: find and set latest version - set_fact: - minecraft_version_latest: "{{ (version_manifest.content | from_json).latest.release }}" diff --git a/tasks/download/latest.yml b/tasks/download/latest.yml deleted file mode 100644 index 24ace0c..0000000 --- a/tasks/download/latest.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -- name: fetch latest version using uri module - include: latest-uri.yml - when: ansible_version.full | version_compare('2.0.2', '>=') - -- name: fetch latest version using curl - include: latest-curl.yml - when: minecraft_version_latest is not defined diff --git a/tasks/download/minecraft.yml b/tasks/download/minecraft.yml index 7cd0a79..e3272e7 100644 --- a/tasks/download/minecraft.yml +++ b/tasks/download/minecraft.yml @@ -1,10 +1,11 @@ -- include: latest.yml - when: minecraft_version == 'latest' +- include: fetch_version_download.yml + when: minecraft_server_download_url is undefined - name: download Minecraft server get_url: - url: "{{ minecraft_url }}/{{ minecraft_version_latest | default(minecraft_version) }}/minecraft_server.{{ minecraft_version_latest | default(minecraft_version) }}.jar" + url: "{{ minecraft_server_download_url }}" dest: "{{ minecraft_home }}/minecraft_server.{{ minecraft_version_latest | default(minecraft_version) }}.jar" owner: "{{ minecraft_user }}" group: "{{ minecraft_group }}" + checksum: "{{minecraft_server_download_checksum}}" mode: '0755' diff --git a/tests/minecraft.yml b/tests/minecraft.yml index 258f157..ea45151 100644 --- a/tests/minecraft.yml +++ b/tests/minecraft.yml @@ -2,7 +2,7 @@ - hosts: all roles: - role: devops-coop.minecraft - minecraft_version: 1.9 + minecraft_version: "1.9" minecraft_server_properties: server-port: 25565 rcon.port: 25564