配置?
-
class
molecule.config.
Config
? 配置類。
Molecule在當前目錄中搜索
molecule.yml
globbing提供的文件 molecule/*/molecule.yml . 這些文件被實例化為一個Molecule列表Config
對象,并且每個Molecule子命令對該列表進行操作。文件所在的目錄
molecule.yml
是場景的目錄。Molecule在這個目錄中執行大多數功能。這個
Config
對象實例化 Dependency, Driver, Lint , Platforms, Provisioner, Verifier, 腳本 和 State 參考文獻。初始化一個新的配置類并返回None。
- 參數
molecule_file -- 包含要分析的Molecule文件路徑的字符串。
args -- CLI中選項、參數和命令的可選dict。
command_args -- 從CLI傳遞給子命令的可選選項dict。
ansible_args -- 提供給
ansible-playbook
命令。
- 返回
沒有
預運行?
為了幫助Ansible找到使用的模塊和角色,Molecle將執行一組預先運行的操作。這些操作涉及從以下位置安裝依賴項 requirements.yml
在項目級別指定,請安裝獨立角色或集合。目的地是 project_dir/.cache
并且代碼本身是從Ansible-lint重用的,它必須執行相同的操作。
這確保了當您在分子攻略中包含一個角色時,Ansible將能夠找到該角色,并且包含的內容與您期望在生產中使用的完全相同。
如果由于某種原因預運行操作不符合您的需要,您仍然可以通過添加 prerun: false 在配置文件內部。
請記住,您可以將此值添加到 .config/molecule/config.yml
文件,以避免將其添加到每個方案中。
變量替換?
-
class
molecule.interpolation.
Interpolator
? 配置選項可能包含環境變量。
例如,假設shell包含
VERIFIER_NAME=testinfra
以下是Molecule.yml已提供。verifier: - name: ${VERIFIER_NAME}
Molecule將取代
$VERIFIER_NAME
價值VERIFIER_NAME
環境變量。警告
如果未設置環境變量,則Molecule將替換為空字符串。
兩個
$VARIABLE
和${{VARIABLE}}
支持語法。擴展的shell樣式功能,例如${{VARIABLE-default}}
和${{VARIABLE:-default}}
也支持。即使默認值作為另一個環境變量也受到支持,比如${{VARIABLE-$DEFAULT}}
或${{VARIABLE:-$DEFAULT}}
. 當兩個變量都未定義時,將返回一個空字符串。如果配置中需要文字美元符號,請使用雙美元符號 ($$ )
Molecule將取代特殊的
MOLECULE_
中定義的環境變量 molecule.yml .重要
記住,那個
MOLECULE_
命名空間是為Molecule保留的。不要給你自己的變量加前綴 MOLECULE_ .一個文件可以作為 .env.yml ,在渲染時,Molecule將讀取變量 molecule.yml . 請參見命令用法。
構造插值器。
中提供了以下環境變量 molecule.yml
:
變量 |
描述 |
---|---|
MOLECULE_DEBUG |
如果調試已打開或關閉 |
MOLECULE_FILE |
配置文件的路徑 |
MOLECULE_ENV_FILE |
Molecule環境文件的路徑 |
MOLECULE_STATE_FILE |
是嗎? |
MOLECULE_INVENTORY_FILE |
生成的庫存文件的路徑 |
MOLECULE_EPHEMERAL_DIRECTORY |
生成目錄的路徑,通常是 |
MOLECULE_SCENARIO_DIRECTORY |
方案目錄的路徑 |
MOLECULE_PROJECT_DIRECTORY |
項目目錄的路徑 |
MOLECULE_INSTANCE_CONFIG |
是嗎? |
MOLECULE_DEPENDENCY_NAME |
依賴類型名稱,通常為“galaxy” |
MOLECULE_DRIVER_NAME |
驅動程序的名稱 |
MOLECULE_PROVISIONER_NAME |
provisioner工具的名稱(通常為“ansible”) |
MOLECULE_REPORT |
轉儲執行報告的HTML文件的名稱。 |
MOLECULE_SCENARIO_NAME |
場景的名稱 |
MOLECULE_VERBOSITY |
確定可解釋的詳細級別。 |
MOLECULE_VERIFIER_NAME |
驗證工具的名稱(通常為“ansible”) |
MOLECULE_VERIFIER_TEST_DIRECTORY |
是嗎? |
附屬國?
測試角色可能依賴于其他依賴項。Molecule通過調用可配置的依賴關系管理器來管理這些依賴關系。
易變星系?
-
class
molecule.dependency.ansible_galaxy.
AnsibleGalaxy
? Galaxy 是默認的依賴關系管理器。
其他選項可以傳遞給
ansible-galaxy install
本節中設置的任何選項都將覆蓋默認值。注解
Molecule將刪除任何匹配的選項'^ [v] +$,然后通過
-vvv
到基礎ansible-galaxy
執行時的命令 molecule --debug .dependency: name: galaxy options: ignore-certs: True ignore-errors: True role-file: requirements.yml requirements-file: collections.yml
如果只有角色,請使用“角色文件”。如果需要安裝集合,請使用“需求文件”。注意,有了ansiblegalaxy的collections支持,如果您的文件看起來像這樣,您現在可以將這兩個列表合并為一個需求
roles: - dep.role1 - dep.role2 collections: - ns.collection - ns2.collection2
如果你想把它們結合起來,那就用你的手指
role-file
和requirements-file
走同一條路。默認情況下不會這樣做,因為role-file
只需要角色列表,而集合必須位于collections:
默認情況下,文件中的鍵并同時指向同一個文件可能會破壞現有代碼。可以通過設置
enabled
錯了。dependency: name: galaxy enabled: False
環境變量可以傳遞給依賴項。
dependency: name: galaxy env: FOO: bar
構造AnsibleGalaxy。
Shell?
-
class
molecule.dependency.shell.
Shell
? Shell
是備用依賴關系管理器。它用于在以下情況下運行命令: Ansible Galaxy 這還不夠。
這個
command
執行是必需的,并且在引用不在$PATH中的腳本時相對于Molecule的項目目錄。注解
與其他依賴關系管理器不同,
options
被忽略,不傳遞給 shell . 附加的標志/子命令只需添加到 command .dependency: name: shell command: path/to/command --flag1 subcommand --flag2
可以通過設置
enabled
錯了。dependency: name: shell command: path/to/command --flag1 subcommand --flag2 enabled: False
環境變量可以傳遞給依賴項。
dependency: name: shell command: path/to/command --flag1 subcommand --flag2 env: FOO: bar
構造外殼。
驅動程序?
Molecule用途 Ansible 管理要操作的實例。Molecule支持任何提供者 Ansible 支持。這項工作交給了工程師 provisioner .
在中指定了驅動程序的名稱 molecule.yml ,并且可以在命令行上重寫。Molecule將記住最后一個成功使用的驅動程序,并繼續為所有后續子命令使用該驅動程序,或者直到實例被Molecule銷毀。
重要
驗證者必須支持Ansible提供者進行適當的Molecule整合。
驅動程序的python包需要安裝。
委派?
-
class
molecule.driver.delegated.
Delegated
? 負責管理委托實例的類。
委托的是 not 在Molecule中使用的默認驅動程序。
在這個驅動下,開發人員負責實現創建和銷毀劇本。
Managed
是所有司機的默認行為。driver: name: delegated
但是,開發人員必須遵守實例配置API。開發者的create playbook必須提供以下實例配置數據,而destroy playbook必須重置實例配置。
- address: ssh_endpoint identity_file: ssh_identity_file # mutually exclusive with password instance: instance_name port: ssh_port_as_string user: ssh_user password: ssh_password # mutually exclusive with identity_file become_method: valid_ansible_become_method # optional become_pass: password_if_required # optional - address: winrm_endpoint instance: instance_name connection: 'winrm' port: winrm_port_as_string user: winrm_user password: winrm_password winrm_transport: ntlm/credssp/kerberos winrm_cert_pem: <path to the credssp public certificate key> winrm_cert_key_pem: <path to the credssp private certificate key> winrm_server_cert_validation: validate/ignore
本文介紹如何在Ansible中配置和使用WinRM:https://docs.ansible.com/ansible/latest/useru guide/windowsu winrm.html
Molecule還可以跳過配置/取消配置步驟。開發人員負責管理實例,并正確配置連接到所述實例的Molecule。
driver: name: delegated options: managed: False login_cmd_template: 'docker exec -ti {instance} bash' ansible_connection_options: ansible_connection: docker platforms: - name: instance-docker
$ docker run \ -d \ --name instance-docker \ --hostname instance-docker \ -it molecule_local/ubuntu:latest sleep infinity & wait
對委托實例使用Molecule,這些實例可以通過ssh訪問。
重要
開發人員負責配置ssh配置文件。
driver: name: delegated options: managed: False login_cmd_template: 'ssh {instance} -F /tmp/ssh-config' ansible_connection_options: ansible_connection: ssh ansible_ssh_common_args: '-F /path/to/ssh-config' platforms: - name: instance
提供Molecule將保留的文件
destroy
行動。driver: name: delegated safe_files: - foo
為了使用localhost作為Molecule的目標:
driver: name: delegated options: managed: False ansible_connection_options: ansible_connection: local
委托構造。
Lint?
從v3開始,Molecule通過調用和外部lint命令來處理項目linting,如下所示。
移除復雜的 linting 支持的決定并不容易,因為我們確實發現它非常有用。問題是molecule在場景中運行,linting通常在存儲庫級別執行。
在每個項目的多個位置執行linting沒有什么意義。Molecon最多可以使用三個 linter,雖然它的目的是靈活處理,但最終卻給用戶帶來了更多的困惑。我們決定通過調用一個外部shell命令來最大限度地提高靈活性。
lint: |
set -e
yamllint .
ansible-lint
flake8
舊的格式不再受支持,您必須更新 molecule.yml
當你升級的時候。如果您不想執行任何linting,則從文件中刪除所有與lint相關的部分就足夠了。
# old v2 format, no longer supported
lint:
name: yamllint
enabled: true
provisioner:
lint:
name: ansible-lint
options: ...
env: ...
verifier:
lint:
name: flake8
平臺?
-
class
molecule.platforms.
Platforms
? 平臺定義要測試的實例,以及實例所屬的組。
platforms: - name: instance-1
可以提供多個實例。
platforms: - name: instance-1 - name: instance-2
將實例映射到組。這些組將由 Provisioner 用于編排目的。
platforms: - name: instance-1 groups: - group1 - group2
子級允許創建一組一組的組。
platforms: - name: instance-1 groups: - group1 - group2 children: - child_group1
初始化一個新的平臺類并返回None。
- 參數
config -- Molecule構型的實例。
- 返回
沒有
供應者?
Molecule處理供應和聚合角色。
Ansible?
-
class
molecule.provisioner.ansible.
Ansible
? Ansible 是默認的provisioner。不支持其他provisioner。
Molecule的provisioner管理實例的生命周期。但是,用戶必須提供create、destroy和converge playbooks。Molecule的
init
為方便起見,子命令將提供必要的文件。Molecule將跳過標記為 molecule-notest 或 notest . 帶標簽的 molecule-idempotence-notest 僅在冪等操作步驟中跳過任務。
重要
保留“創建和銷毀劇本”以進行資源調配。不要試圖收集事實或在這些劇本中的配置節點上執行操作。由于需要體操同步狀態之間的Ansible和Molecule,它是最好的執行這些任務的準備或會聚劇本。
開發人員有責任將模塊的事實數據正確映射到Create劇本中的INSTANCE_CONF_DICT事實中。這使得分子能夠正確地配置可拆分的庫存。
其他選項可以傳遞給
ansible-playbook
本節中設置的任何選項都將覆蓋默認值。重要
選項不影響創建和銷毀操作。
注解
Molecule將刪除任何匹配的選項'^ [v] +$,然后通過
-vvv
到基礎ansible-playbook
執行時的命令 molecule --debug .除非用
--debug
旗幟。但是,這會產生相當多的輸出。要啟用Ansible日志輸出,請將以下內容添加到provisioner
截面molecule.yml
.provisioner: name: ansible log: True
Docker和Podman的創建/銷毀劇本與Molecule捆綁在一起。這些劇本有一個來自 molecule.yml ,和是最常用的。捆綁的劇本仍然可以被覆蓋。
劇本加載順序為:
provisioner.playbooks.$driver_name.$action
provisioner.playbooks.$action
bundled_playbook.$driver_name.$action
provisioner: name: ansible options: vvv: True playbooks: create: create.yml converge: converge.yml destroy: destroy.yml
角色之間共享劇本。
provisioner: name: ansible playbooks: create: ../default/create.yml destroy: ../default/destroy.yml converge: converge.yml
多個驅動程序劇本。在某些情況下,開發人員可能會選擇在不同的后端測試相同的角色。如果確定的驅動程序在提供者的dict的playbooks部分中有一個鍵,那么Molecule將選擇特定于驅動程序的create/destroy playbooks。
重要
如果確定的驅動程序在playbooks dict中有一個鍵,Molecule將使用這個dict來解析所有配置playbooks(create/destroy)。
provisioner: name: ansible playbooks: docker: create: create.yml destroy: destroy.yml create: create.yml destroy: destroy.yml converge: converge.yml
重要
本節中的路徑轉換為絕對路徑,其中相對父路徑是$u目錄。
副作用劇本執行對實例產生副作用的動作。用于測試HA故障轉移場景等。默認情況下不啟用。將以下內容添加到provisioner的
playbooks
要啟用的節。provisioner: name: ansible playbooks: side_effect: side_effect.yml
重要
這個特性應該被認為是實驗性的。
prepare playbook執行動作,使系統在收斂之前達到給定的狀態。它在創建之后執行,并且在實例生命周期內只執行一次。
這可用于在測試之前將實例置于特定狀態。
provisioner: name: ansible playbooks: prepare: prepare.yml
cleanup playbook用于清理將被銷毀的實例上可能不存在的測試基礎結構。主要用例用于“清理”在Molecule測試環境之外所做的更改。例如,遠程數據庫連接或用戶帳戶。與…結合使用 prepare 在需要時修改外部資源。
清理步驟直接在每個銷毀步驟之前執行。就像銷毀步驟一樣,它將運行兩次。在收斂之前進行初始清理,然后在最后一步銷毀之前進行清理。這意味著清理劇本必須處理清理尚未創建的資源的失敗。
將以下內容添加到provisioner的 playbooks 要啟用的節。
provisioner: name: ansible playbooks: cleanup: cleanup.yml
重要
這個特性應該被認為是實驗性的。
環境變量。Molecule盡其所能處理常見的易變路徑。默認值如下。
ANSIBLE_ROLES_PATH: $ephemeral_directory/roles/:$project_directory/../:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles ANSIBLE_LIBRARY: $ephemeral_directory/modules/:$project_directory/library/:~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules ANSIBLE_FILTER_PLUGINS: $ephemeral_directory/plugins/filter/:$project_directory/filter/plugins/:~/.ansible/plugins/filter:/usr/share/ansible/plugins/modules
可以將環境變量傳遞給置備程序。本節中與上述名稱匹配的變量將附加到上述缺省值之后,并轉換為絕對路徑,其中相對父級為$SCENPACTION_DIRECTORY。
重要
本節中的路徑轉換為絕對路徑,其中相對父路徑是$u目錄。
provisioner: name: ansible env: FOO: bar
修改ansible.cfg文件.
provisioner: name: ansible config_options: defaults: fact_caching: jsonfile ssh_connection: scp_if_ssh: True
重要
以下鍵是不允許的,以防止Molecule功能不正常。除了 privilege_escalation .
provisioner: name: ansible config_options: defaults: roles_path: /path/to/roles_path library: /path/to/library filter_plugins: /path/to/filter_plugins privilege_escalation: {}
需要主機/組設置某些變量的角色。Molecule使用相同的 variables defined in a playbook 語法為 Ansible .
provisioner: name: ansible inventory: group_vars: foo1: foo: bar foo2: foo: bar baz: qux: zzyzx host_vars: foo1-01: foo: bar
Molecule會根據下定義的主機自動生成清單 Platforms . 使用
hosts
鍵允許向庫存中添加不受Molecule管理的額外主機。一個典型的用例是,如果您想從清單中的另一個主機訪問一些變量(使用hostvars),而不創建它。
注解
的內容
hosts
應該遵循基于YAML的清單語法:從all
組并具有hosts/vars/children條目。provisioner: name: ansible inventory: hosts: all: extra_host: foo: hello
重要
分子不會創建/銷毀使用此密鑰添加到清單中的額外主機。開發人員有責任在行動手冊中針對適當的主機。僅在下定義的主機 Platforms 應該成為目標,而不是
all
。另一種方法是符號連接。Molecule創建指向清單目錄中指定目錄的符號鏈接。這使得ansible能夠利用其內置的主機/組變量分辨率進行聚合。這兩種庫存管理形式是互斥的。
如上所述,可以使用
hosts
關鍵。 Ansible 將自動合并這個清單和Molecule生成的清單。如果您想定義不受Molecule管理的額外主機,這將非常有用。重要
同樣,開發人員有責任在攻略中針對適當的主機。僅在下定義的主機 Platforms 應該成為目標,而不是
all
。注解
源目錄鏈接相對于場景的目錄。
唯一有效的密鑰是
hosts
,group_vars
和host_vars
. Molecule的模式驗證器將強制執行此操作。provisioner: name: ansible inventory: links: hosts: ../../../inventory/hosts group_vars: ../../../inventory/group_vars/ host_vars: ../../../inventory/host_vars/
替代連接選項:
provisioner: name: ansible connection_options: ansible_ssh_user: foo ansible_ssh_common_args: -o IdentitiesOnly=no
運行converge時向ansible playbook添加參數:
provisioner: name: ansible ansible_args: - --inventory=mygroups.yml - --limit=host1,host2
初始化一個新的ansible類并返回None。
- 參數
config -- Molecule構型的實例。
- 返回
沒有
腳本?
Molecule將場景視為一級公民,使用頂級配置語法。
-
class
molecule.scenario.
Scenario
? 一個場景允許Molecule以特定的方式測試一個角色,這是從Moleculev1的根本變化。
場景是一個自包含的目錄,其中包含以特定方式測試角色所需的所有內容。默認場景命名為
default
,并且每個角色都應該包含一個默認場景。除非明確提及,否則場景名稱將是承載文件的目錄名。
本節中設置的任何選項都將覆蓋默認值。
scenario: create_sequence: - dependency - create - prepare check_sequence: - dependency - cleanup - destroy - create - prepare - converge - check - destroy converge_sequence: - dependency - create - prepare - converge destroy_sequence: - dependency - cleanup - destroy test_sequence: - dependency - lint - cleanup - destroy - syntax - create - prepare - converge - idempotence - side_effect - verify - cleanup - destroy
初始化一個新的場景類并返回None。
- 參數
config -- Molecule構型的實例。
- 返回
沒有
州?
內部簿記機制。
驗證者?
Molecule通過調用可配置的驗證器來處理角色測試。
Ansible?
睪丸?
-
class
molecule.verifier.testinfra.
Testinfra
? Testinfra 不再是3.0版之后的默認測試驗證器。
其他選項可以傳遞給
testinfra
本節中設置的任何選項都將覆蓋默認值。注解
Molecule將刪除任何匹配的選項'^ [v] +$,然后通過
-vvv
到基礎pytest
執行時的命令molecule --debug
.verifier: name: testinfra options: n: 1
可以通過設置
enabled
錯了。verifier: name: testinfra enabled: False
環境變量可以傳遞給驗證器。
verifier: name: testinfra env: FOO: bar
更改測試目錄的路徑。
verifier: name: testinfra directory: /foo/bar/
來自與場景的tests目錄相關的另一個文件或目錄的附加測試(支持regexp)。
verifier: name: testinfra additional_files_or_dirs: - ../path/to/test_1.py - ../path/to/test_2.py - ../path/to/directory/*
設置要執行的需求
testinfra
不返回任何值。- 參數
config -- Molecule構型的實例。
- 返回
沒有