Skip to main content
NetApp Automation
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

定制ONTAP Day 1解决方案

贡献者 netapp-aoife dmp-netapp

要根据您的需求自定义ONTAP Day 1解决方案、您可以添加或更改Ands还是 角色。

角色表示在Andsent框架内的微服务。每个微服务执行一个操作。例如、ONTAP Day 0是包含多个微服务的服务。

添加Ands处理 角色

您可以添加Ans可 通过角色为您的环境自定义解决方案。所需角色由在Ands还是 在框架中定义的服务定义来定义。

角色必须满足以下要求才能用作微服务:

  • 接受变量中的参数列表 args

  • 对于每个块、使用具有特定要求的"Andsing"结构。

  • 使用单个Ans还是 模块并在块中定义单个任务。

  • 根据本节详细介绍的要求实施每个可用的模块参数。

所需的微服务结构

每个角色都必须支持以下变量:

  • mode:如果将模式设置为角色,则 `test`尝试导入显示该角色所执行的 `test.yml`操作而不实际执行该角色。

    备注 由于某些相互依赖关系、并非总是可以实现这一点。
  • status:执行手册的整体状态。如果未将此值设置为 success、则不会执行此角色。

  • args:具有与角色参数名称匹配的关键字的角色专用词典列表。

  • global_log_messages:在执行播放手册期间收集日志消息。每次执行角色时都会生成一个条目。

  • log_name:用于引用条目中的角色的名称 global_log_messages

  • task_descr:有关该角色的作用的简要说明。

  • service_start_time:用于跟踪每个角色执行时间的时间戳。

  • playbook_status:Ans负责人 的状态。

  • role_result:包含角色输出并包含在条目中的每条消息中的变量 global_log_messages

示例角色结构

以下示例提供了实施微服务的角色的基本结构。您必须更改此示例中适用于您的配置的变量。

显示示例

基本角色结构:

- name:  Set some role attributes
  set_fact:
    log_name:     "<LOG_NAME>"
    task_descr:   "<TASK_DESCRIPTION>"

-  name: "{{ log_name }}"
   block:
      -  set_fact:
            service_start_time: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"

      -  name: "Provision the new user"
         <MODULE_NAME>:
            #-------------------------------------------------------------
            # COMMON ATTRIBUTES
            #-------------------------------------------------------------
            hostname:            "{{ clusters[loop_arg['hostname']]['mgmt_ip'] }}"
            username:            "{{ clusters[loop_arg['hostname']]['username'] }}"
            password:            "{{ clusters[loop_arg['hostname']]['password'] }}"

            cert_filepath:       "{{ loop_arg['cert_filepath']                | default(omit) }}"
            feature_flags:       "{{ loop_arg['feature_flags']                | default(omit) }}"
            http_port:           "{{ loop_arg['http_port']                    | default(omit) }}"
            https:               "{{ loop_arg['https']                        | default('true') }}"
            ontapi:              "{{ loop_arg['ontapi']                       | default(omit) }}"
            key_filepath:        "{{ loop_arg['key_filepath']                 | default(omit) }}"
            use_rest:            "{{ loop_arg['use_rest']                     | default(omit) }}"
            validate_certs:      "{{ loop_arg['validate_certs']               | default('false') }}"

            <MODULE_SPECIFIC_PARAMETERS>
            #-------------------------------------------------------------
            # REQUIRED ATTRIBUTES
            #-------------------------------------------------------------
            required_parameter:     "{{ loop_arg['required_parameter'] }}"
            #-------------------------------------------------------------
            # ATTRIBUTES w/ DEFAULTS
            #-------------------------------------------------------------
            defaulted_parameter:    "{{ loop_arg['defaulted_parameter'] | default('default_value') }}"
            #-------------------------------------------------------------
            # OPTIONAL ATTRIBUTES
            #-------------------------------------------------------------
            optional_parameter:     "{{ loop_arg['optional_parameter'] | default(omit) }}"
         loop:    "{{ args }}"
         loop_control:
            loop_var:   loop_arg
         register:   role_result

   rescue:
      -  name: Set role status to FAIL
         set_fact:
            playbook_status:   "failed"

   always:
      -  name: add log msg
         vars:
            role_log:
               role: "{{ log_name }}"
               timestamp:
                  start_time: "{{service_start_time}}"
                  end_time: "{{ lookup('pipe', 'date +%Y-%m-%d@%H:%M:%S') }}"
               service_status: "{{ playbook_status }}"
               result: "{{role_result}}"
         set_fact:
            global_log_msgs:   "{{ global_log_msgs + [ role_log ] }}"
示例角色中使用的变量:
  • <NAME>:必须为每个微服务提供的可替换值。

  • <LOG_NAME>:用于日志记录的角色的简称。例如, ONTAP_VOLUME

  • <TASK_DESCRIPTION>:微服务功能的简要说明。

  • <MODULE_NAME>:任务的Ans担负 模块名称。

    备注 顶级 execute.yml`操作手册用于指定 `netapp.ontap`集合。如果模块是集合的一部分 `netapp.ontap,则无需完全指定模块名称。
  • <MODULE_SPECIFIC_PARAMETERS>:特定于用于实施微服务的模块的Ans得 模块参数。以下列表介绍了参数的类型以及应如何对其进行分组。

    • 必需参数:所有必需参数均指定、无默认值。

    • 具有特定于微服务的默认值的参数(与模块文档指定的默认值不同)。

    • 所有剩余参数均 `default(omit)`用作默认值。

使用多层词典作为模块参数

某些NetApp提供的Ans典 模块使用多级别词典作为模块参数(例如、固定和自适应QoS策略组)。

如果使用这些词典、则单独使用 `default(omit)`不起作用、尤其是当有多个词典且它们互斥时。

如果您需要使用多级别词典作为模块参数、则应将此功能拆分为多个微服务(角色)、以确保每个微服务都能为相关词典至少提供一个二级词典值。

以下示例显示了固定和自适应QoS策略组、它们分别分布在两个微服务中。

第一个微服务包含固定的QoS策略组值:

fixed_qos_options:
  capacity_shared:           "{{ loop_arg['fixed_qos_options']['capacity_shared']         | default(omit) }}"
  max_throughput_iops:       "{{ loop_arg['fixed_qos_options']['max_throughput_iops']     | default(omit) }}"
  min_throughput_iops:       "{{ loop_arg['fixed_qos_options']['min_throughput_iops']     | default(omit) }}"
  max_throughput_mbps:       "{{ loop_arg['fixed_qos_options']['max_throughput_mbps']     | default(omit) }}"
  min_throughput_mbps:       "{{ loop_arg['fixed_qos_options']['min_throughput_mbps']     | default(omit) }}"

第二个微服务包含自适应QoS策略组值:

adaptive_qos_options:
  absolute_min_iops:         "{{ loop_arg['adaptive_qos_options']['absolute_min_iops'] | default(omit) }}"
  expected_iops:             "{{ loop_arg['adaptive_qos_options']['expected_iops']     | default(omit) }}"
  peak_iops:                 "{{ loop_arg['adaptive_qos_options']['peak_iops']         | default(omit) }}"