diff options
Diffstat (limited to 'test/integration/targets/binary_modules')
9 files changed, 185 insertions, 0 deletions
diff --git a/test/integration/targets/binary_modules/Makefile b/test/integration/targets/binary_modules/Makefile new file mode 100644 index 00000000..c3092e47 --- /dev/null +++ b/test/integration/targets/binary_modules/Makefile @@ -0,0 +1,16 @@ +.PHONY: all clean + +all: + # Compiled versions of these binary modules are available at the url below. + # This avoids a dependency on go and keeps the binaries out of our git repository. + # https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_binary_modules/ + cd library; \ + GOOS=linux GOARCH=amd64 go build -o helloworld_linux_x86_64 helloworld.go; \ + GOOS=linux GOARCH=ppc64le go build -o helloworld_linux_ppc64le helloworld.go; \ + GOOS=aix GOARCH=ppc64 go build -o helloworld_aix_chrp helloworld.go; \ + GOOS=windows GOARCH=amd64 go build -o helloworld_win32nt_64-bit.exe helloworld.go; \ + GOOS=darwin GOARCH=amd64 go build -o helloworld_darwin_x86_64 helloworld.go; \ + GOOS=freebsd GOARCH=amd64 go build -o helloworld_freebsd_amd64 helloworld.go + +clean: + rm -f library/helloworld_* diff --git a/test/integration/targets/binary_modules/aliases b/test/integration/targets/binary_modules/aliases new file mode 100644 index 00000000..136c05e0 --- /dev/null +++ b/test/integration/targets/binary_modules/aliases @@ -0,0 +1 @@ +hidden diff --git a/test/integration/targets/binary_modules/download_binary_modules.yml b/test/integration/targets/binary_modules/download_binary_modules.yml new file mode 100644 index 00000000..e8f51b1a --- /dev/null +++ b/test/integration/targets/binary_modules/download_binary_modules.yml @@ -0,0 +1,9 @@ +- hosts: testhost + tasks: + - name: download binary module + tags: test_binary_modules + get_url: + url: "https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_binary_modules/{{ filename }}" + dest: "{{ playbook_dir }}/library/{{ filename }}" + mode: 0755 + delegate_to: localhost diff --git a/test/integration/targets/binary_modules/group_vars/all b/test/integration/targets/binary_modules/group_vars/all new file mode 100644 index 00000000..1d3ff5e4 --- /dev/null +++ b/test/integration/targets/binary_modules/group_vars/all @@ -0,0 +1,3 @@ +system: "{{ ansible_system|lower }}" +suffix: "{{ '.exe' if system == 'win32nt' else '' }}" +filename: "helloworld_{{ system }}_{{ ansible_architecture }}{{ suffix }}" diff --git a/test/integration/targets/binary_modules/library/.gitignore b/test/integration/targets/binary_modules/library/.gitignore new file mode 100644 index 00000000..d034a06a --- /dev/null +++ b/test/integration/targets/binary_modules/library/.gitignore @@ -0,0 +1 @@ +helloworld_* diff --git a/test/integration/targets/binary_modules/library/helloworld.go b/test/integration/targets/binary_modules/library/helloworld.go new file mode 100644 index 00000000..a4c16b20 --- /dev/null +++ b/test/integration/targets/binary_modules/library/helloworld.go @@ -0,0 +1,89 @@ +// This file is part of Ansible +// +// Ansible is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Ansible is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Ansible. If not, see <http://www.gnu.org/licenses/>. + +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "os" +) + +type ModuleArgs struct { + Name string +} + +type Response struct { + Msg string `json:"msg"` + Changed bool `json:"changed"` + Failed bool `json:"failed"` +} + +func ExitJson(responseBody Response) { + returnResponse(responseBody) +} + +func FailJson(responseBody Response) { + responseBody.Failed = true + returnResponse(responseBody) +} + +func returnResponse(responseBody Response) { + var response []byte + var err error + response, err = json.Marshal(responseBody) + if err != nil { + response, _ = json.Marshal(Response{Msg: "Invalid response object"}) + } + fmt.Println(string(response)) + if responseBody.Failed { + os.Exit(1) + } else { + os.Exit(0) + } +} + +func main() { + var response Response + + if len(os.Args) != 2 { + response.Msg = "No argument file provided" + FailJson(response) + } + + argsFile := os.Args[1] + + text, err := ioutil.ReadFile(argsFile) + if err != nil { + response.Msg = "Could not read configuration file: " + argsFile + FailJson(response) + } + + var moduleArgs ModuleArgs + err = json.Unmarshal(text, &moduleArgs) + if err != nil { + response.Msg = "Configuration file not valid JSON: " + argsFile + FailJson(response) + } + + var name string = "World" + if moduleArgs.Name != "" { + name = moduleArgs.Name + } + + response.Msg = "Hello, " + name + "!" + ExitJson(response) +} diff --git a/test/integration/targets/binary_modules/roles/test_binary_modules/tasks/main.yml b/test/integration/targets/binary_modules/roles/test_binary_modules/tasks/main.yml new file mode 100644 index 00000000..35a58dcb --- /dev/null +++ b/test/integration/targets/binary_modules/roles/test_binary_modules/tasks/main.yml @@ -0,0 +1,53 @@ +- debug: var=ansible_system + +- name: ping + ping: + when: ansible_system != 'Win32NT' + +- name: win_ping + action: win_ping + when: ansible_system == 'Win32NT' + +- name: Hello, World! + action: "{{ filename }}" + register: hello_world + +- assert: + that: + - 'hello_world.msg == "Hello, World!"' + +- name: Hello, Ansible! + action: "{{ filename }}" + args: + name: Ansible + register: hello_ansible + +- assert: + that: + - 'hello_ansible.msg == "Hello, Ansible!"' + +- name: Async Hello, World! + action: "{{ filename }}" + async: 10 + poll: 1 + when: ansible_system != 'Win32NT' + register: async_hello_world + +- assert: + that: + - 'async_hello_world.msg == "Hello, World!"' + when: async_hello_world is not skipped + +- name: Async Hello, Ansible! + action: "{{ filename }}" + args: + name: Ansible + async: 10 + poll: 1 + when: ansible_system != 'Win32NT' + register: async_hello_ansible + +- assert: + that: + - 'async_hello_ansible.msg == "Hello, Ansible!"' + when: async_hello_ansible is not skipped diff --git a/test/integration/targets/binary_modules/test.sh b/test/integration/targets/binary_modules/test.sh new file mode 100755 index 00000000..7f046670 --- /dev/null +++ b/test/integration/targets/binary_modules/test.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -eux + +[ -f "${INVENTORY}" ] + +ANSIBLE_HOST_KEY_CHECKING=false ansible-playbook download_binary_modules.yml -i "${INVENTORY}" -v "$@" +ANSIBLE_HOST_KEY_CHECKING=false ansible-playbook test_binary_modules.yml -i "${INVENTORY}" -v "$@" diff --git a/test/integration/targets/binary_modules/test_binary_modules.yml b/test/integration/targets/binary_modules/test_binary_modules.yml new file mode 100644 index 00000000..bdf2a061 --- /dev/null +++ b/test/integration/targets/binary_modules/test_binary_modules.yml @@ -0,0 +1,5 @@ +- hosts: testhost + roles: + - role: test_binary_modules + tags: + - test_binary_modules |