配置?

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

生成目錄的路徑,通常是 ~/.cache/molecule/<scenario-name>

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-filerequirements-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-notestnotest . 帶標簽的 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 ,和是最常用的。捆綁的劇本仍然可以被覆蓋。

劇本加載順序為:

  1. provisioner.playbooks.$driver_name.$action

  2. provisioner.playbooks.$action

  3. 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_varshost_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構型的實例。

返回

沒有

?

內部簿記機制。

class molecule.state.State?

管理狀態文件的類。

在一個給定的Molecule結構中用作一個單子。如果文件不存在,則將初始狀態序列化到磁盤,否則將從現有狀態文件反序列化。對對象所做的更改將立即序列化。

狀態不是Molecule配置中的頂級選項。它的目的是記賬,每一個 Config 對象具有對 State 對象。

注解

目前,它的用途明顯小于它在v1Molecule中的用途。

初始化一個新的state類并返回None。

參數

config -- Molecule構型的實例。

返回

沒有

驗證者?

Molecule通過調用可配置的驗證器來處理角色測試。

Ansible?

class molecule.verifier.ansible.Ansible?

Ansible 是默認的測試驗證器。

Molecule執行劇本 (verify.yml )位于角色的 scenario.directory .

verifier:
  name: ansible

可以通過設置 enabled 錯了。

verifier:
  name: ansible
  enabled: False

環境變量可以傳遞給驗證器。

verifier:
  name: ansible
  env:
    FOO: bar

初始化所有的代碼 驗證者 類。

參數

config -- Molecule構型的實例。

返回

沒有

睪丸?

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構型的實例。

返回

沒有