У меня проблема с тем, что мои значения по умолчанию обычно хранятся в defaults/main.yml
для выполнения ansible сценариев, но я не нашел способ переопределить их. Я использую молекулу для тестирования, и я хочу метод передачи переменных в мой molecule/default/molecule.yml
или molecule/default/playbook.yml
, чтобы я мог динамически установить phpVersion
.
- Здесь переменная статически установлен со значением по умолчанию
# defaults/main.yml
phpVersion: 7.0
- , здесь используется переменная
#tasks/main.yml
---
- name: Check if OS is Ubuntu LTS
fail: msg="Server must be Ubuntu LTS"
when: ansible_distribution != 'Ubuntu'
or (ansible_distribution_version != '14.04'
and ansible_distribution_version != '16.04'
and ansible_distribution_version != '18.04')
- name: Get default PHP version
shell: >
set -o pipefail && \
/usr/bin/php -v | grep 'PHP '
register: php_installed_default_version
failed_when: false
changed_when: false
- name: Add ondrej repo to allow multiple PHP versions
apt_repository:
repo: "ppa:ondrej/php"
update_cache: yes
- name: Include php version specific playbook
include_tasks: "php{{ item }}.yml"
with_items: "{{ php_versions }}"
when: php_versions is defined
- name: Set default PHP version to 7.0 (PHP CLI)
shell: update-alternatives --set php /usr/bin/php{{ phpVersion }}
register: command_result
when: phpVersion == 7.0
and php_installed_default_version is defined
and php_installed_default_version.stdout is defined
and (not php_installed_default_version.stdout | regex_search("PHP 7\.0"))
changed_when: command_result.stdout == "to provide"
- name: Set default PHP version to 7.1 (PHP CLI)
shell: update-alternatives --set php /usr/bin/php{{ phpVersion }}
register: command_result
when: phpVersion == 7.1
and php_installed_default_version is defined
and php_installed_default_version.stdout is defined
and (not php_installed_default_version.stdout | regex_search("PHP 7\.1"))
changed_when: command_result.stdout == "to provide"
- name: Set default PHP version to 7.2 (PHP CLI)
shell: update-alternatives --set php /usr/bin/php{{ phpVersion }}
register: command_result
when: phpVersion == 7.2
and php_installed_default_version is defined
and php_installed_default_version.stdout is defined
and (not php_installed_default_version.stdout | regex_search("PHP 7\.2"))
changed_when: command_result.stdout == "to provide"
# find out what update alternatives spits out and parse some of that through the registered variable: did this task change or not.
- name: Set default PHP version to 7.3 (PHP CLI)
shell: update-alternatives --set php /usr/bin/php{{ phpVersion }}
register: command_result
when: phpVersion == 7.3
and php_installed_default_version is defined
and php_installed_default_version.stdout is defined
and (not php_installed_default_version.stdout | regex_search("PHP 7\.3"))
changed_when: command_result.stdout == "to provide"
, поэтому для запуска мои тесты я ввожу эту команду:
$ MOLECULE_DISTRO=ubuntu1804-php70 molecule test --destroy=never
- здесь у меня есть моя установка молекулы
# molecule/default/molecule.yml
---
dependency:
name: galaxy
driver:
name: docker
lint:
name: yamllint
options:
config-data:
ignore: venv
platforms:
- name: instance
image: "superelectron/docker-ubuntu-ansible-php:${MOLECULE_DISTRO:-ubuntu1804-php70}"
command: ${MOLECULE_DOCKER_COMMAND:-""}
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
privileged: true
pre_build_image: true
instance_raw_config_args:
- "vm.network 'forwarded_port', guest: 80, host: 8088"
provisioner:
name: ansible
log: true
lint:
name: ansible-lint
verifier:
name: testinfra
lint:
name: flake8
- и вот моя тестовая книга воспроизведения
# molecule/default/playbook.yml
---
- name: Converge
hosts: all
roles:
- role: ansible-role-php
vars:
phpVersion: 7.0
Из molecule.yml
и playbook.yml
вы можете видеть, как БОЛЬШО было бы проходить что-то подобное для установки phpVersion:
phpVersion=7.0 MOLECULE_DISTRO=ubuntu1804-php70 molecule test --destroy=never
и чтобы playbook.yml установил переменную следующим образом:
vars:
phpVersion: ${phpVersion}
Вопрос в том, как я могу динамически установить переменную, используемую в tasks / main.yml с молекулой, чтобы мои тесты динамически устанавливают phpVersion?