牛角号 #73
面向 Ansible 开发者社区的通讯 第 73 期,2022-09-09 (往期)
欢迎来到 牛角号,我们面向 Ansible 开发者社区的通讯。如果您有任何问题或内容要分享,欢迎在 Matrix 上的 Ansible 社交房间 与我们聊天,并提及 newsbot
以将您的新闻项目标记为下一期周报的审核!
面向 Ansible 开发者社区的通讯 第 73 期,2022-09-09 (往期)
欢迎来到 牛角号,我们面向 Ansible 开发者社区的通讯。如果您有任何问题或内容要分享,欢迎在 Matrix 上的 Ansible 社交房间 与我们聊天,并提及 newsbot
以将您的新闻项目标记为下一期周报的审核!
我们一年中最喜欢的活动就要来了!AnsibleFest 将以线下活动的形式回归,这是感受自动化全部力量的唯一地方。加入我们 10 月 18 日和 19 日在芝加哥,沉浸在这个将 Ansible 打造成行业领先的自动化技术的运动中。
AnsibleFest 2022 会议目录和议程构建器现已开放。这意味着您可以查看今年的所有会议内容并构建自己的定制体验。让我们更仔细地看一下 AnsibleFest 2022 提供的所有内容。
今年我们将推出六条内容轨道。这些轨道包括:自动化入门、Ansible 社区、应用自动化、Ansible 自动化平台、高级 Ansible 和自动化采用。这些轨道中的会议将涵盖一系列重点领域,包括网络自动化、安全自动化、边缘自动化、IT 领导者、开发人员等等。我们还提供各种客户、合作伙伴和 Ansible 贡献者演讲,欢迎加入。您可以在我们的 会议目录 中查看所有提供的会议。
在 AnsibleFest 的研讨会和实验室中获得动手实践经验。我们将为我们的与会者提供混合式自学和讲师主导的研讨会。主题涵盖从 Ansible 101 和编写第一个剧本到使用 Ansible 和 Ansible 301 进行 Terraform。我们提供超过 20 个实验室和研讨会,每个级别的自动化用户都有可供探索的内容。查看我们将在 会议目录 中提供的动手实践内容,了解 AnsibleFest 如何帮助您提升自动化技能。
在芝加哥,我们推出一个新的会议环节,焦点舞台。这些会议将是来自主要 Ansible 客户和合作伙伴的 15 分钟闪电演讲和演示,并将包括一个互动环节,演讲者将在其中回答观众的问题。焦点舞台将直接连接到展厅的 Red Hat Ansible 自动化平台展位,以便所有与会者方便地参与。
实践社区是今年 AnsibleFest 中 AnsibleFest 走廊轨道中的一组新的开放论坛。这些是 30 分钟的开放论坛,由 Ansible 专家领导,涵盖一系列多样化的主题。观众将根据他们想从专家那里学到的内容来驱动这些主题的讨论。我们将涵盖的主题包括自动化社区+热情、网络自动化、Ansible 自动化平台、边缘自动化、安全自动化、事件驱动型自动化和云自动化。
随着 AnsibleFest 以线下形式回归,我们很高兴能够重新推出“向专家提问”区域。在这里,您可以与 Ansible 专家进行一对一交流,询问任何关于自动化的迫切问题。我们现在将提供一个更大的空间,为每个专家的专业领域指定区域,帮助您找到适合您问题的正确专家。专家将涵盖广泛的主题,包括产品组件和功能、迁移,以及特定用例主题,如边缘、网络和事件驱动型自动化。
面向 Ansible 开发者社区的通讯 第 72 期,2022-09-02 (往期)
欢迎来到 牛角号,我们面向 Ansible 开发者社区的通讯。如果您有任何问题或内容要分享,欢迎在 Matrix 上的 Ansible 社交房间 与我们聊天,并提及 newsbot
以将您的新闻项目标记为下一期周报的审核!
面向 Ansible 开发者社区的通讯 第 71 期,2022-08-26 (往期)
欢迎来到 牛角号,我们面向 Ansible 开发者社区的通讯。如果您有任何问题或内容要分享,欢迎在 Matrix 上的 Ansible 社交房间 与我们聊天,并提及 newsbot
以将您的新闻项目标记为下一期周报的审核!
当我们管理大量虚拟机 (VM) 时,我们希望减少它们之间的差异并创建一个标准模板。通过使用标准模板,管理和在不同节点上传播相同的操作变得更容易。在使用 VMware vSphere 时,使用标准化的 VM 模板并将其用于创建新的 VM 是一种常见做法。该模板通常被称为黄金映像。它的创建涉及一系列步骤,这些步骤可以使用 Ansible 自动化。在本博文中,我们将了解如何创建和使用新的黄金映像。
我们使用 映像构建器 来准备新的映像。该工具提供了一个用户界面,允许用户定义自定义映像。在本例中,我们包含 SSH 服务器和 tmux。结果映像是 VMDK4 格式的文件,VMware vSphere 7 不完全支持它,这就是我们使用 .vmdk-4
后缀的原因。
我们使用 uri 模块上传映像。使用这种方法上传大型文件速度相当慢。如果可以,您可能希望将文件直接放到数据存储区(例如:NFS/CIFS)。以下示例假设数据存储区名为 rw_datastore,数据中心名称为 my_dc。以下剧本摘录展示了我们如何上传映像。
- name: Upload from contents of remote file ansible.builtin.uri: force_basic_auth: true url: 'https://vcenter.test/folder/my-vmdk/my-golden-image.vmdk-4?dcPath=my_dc&dsName=rw_datastore' url_username: '{{ lookup("ansible.builtin.env", "VMWARE_USER") }}' url_password: '{{ lookup("ansible.builtin.env", "VMWARE_PASSWORD") }}' method: PUT status_code: 201 src: my-golden-image.vmdk-4 validate_certs: false follow_redirects: yes
现在我们已经上传了文件,我们将将其转换为最新的 VMDK 文件。为此,我们使用 vmkfstools。该工具默认情况下在 ESXi7 主机上可用。在下面的任务中,我们使用 delegate_to: esxi1.test 在我们的其中一个主机上运行命令。
- name: Convert the image in an up to date VMDK format ansible.builtin.command: "vmkfstools -i /vmfs/volumes/rw_datastore/my-vmdk/my-golden-image.vmdk-4.vmdk-4 /vmfs/volumes/rw_datastore/my-vmdk/my-golden-image.vmdk -d thin" delegate_to: esxi1.test vars: ansible_user: root ansible_python_interpreter: /bin/python3
在此阶段,磁盘已准备就绪,我们可以将其连接到 VM。
- name: Create a VM vmware.vmware_rest.vcenter_vm: placement: cluster: "" datastore: "" folder: "" resource_pool: "" name: my-golden-vm guest_OS: RHEL_7_64 hardware_version: VMX_11 memory: hot_add_enabled: true size_MiB: 1024 disks: - type: SATA backing: type: VMDK_FILE vmdk_file: "[rw_datastore] my-vmdk/my-golden-image.vmdk" cdroms: - type: SATA sata: bus: 0 unit: 2 nics: - backing: type: STANDARD_PORTGROUP network: "" register: my_vm
有四种不同的方法可以使用 Ansible 的 vmware.vmware_rest 集合克隆 VM。本文解释了它们之间的区别以及如何在 Ansible 中使用它们。
当我们克隆 VM 时,我们创建了原始 VM 的副本。但是,原始 VM 仍然可以发展,从同一 VM 克隆的第二个副本可能不同。不能保证两个副本将基于完全相同的映像。
vmware.vmware_rest.vcenter_vm
模块允许我们准备即时克隆或常规克隆。
根据 VMware 官方文档,即时克隆是正在运行的 VM 的轻量级副本。它与原始 VM 共享内存块。这就是为什么必须先运行原始 VM 才能克隆它。
- name: Turn the power on the VM on, since it's are pre-condition for Instant Clone vmware.vmware_rest.vcenter_vm_power: state: start vm: '{{ my_vm.id }}' - name: Wait until my VM is ready vmware.vmware_rest.vcenter_vm_tools_info: vm: '{{ my_vm.id }}' register: vm_tools_info until: - vm_tools_info is not failed - vm_tools_info.value.run_state == "RUNNING" retries: 10 delay: 5
现在我们已经启动并运行了 VM,我们可以对其进行即时克隆
- name: Create an instant clone of a VM vmware.vmware_rest.vcenter_vm: placement: datastore: "{{ lookup('vmware.vmware_rest.datastore_moid', '/my_dc/datastore/local') }}" folder: "{{ lookup('vmware.vmware_rest.folder_moid', '/my_dc/vm') }}" resource_pool: "{{ lookup('vmware.vmware_rest.resource_pool_moid', '/my_dc/host/my_cluster/Resources') }}" state: instant_clone source: "{{ my_vm.id }}" name: instant_clone_1
我们也可以 克隆现有 VM。如果 VM 带有大型磁盘,此操作需要更长的时间,最多几小时。此操作将创建原始 VM 的完整副本。这次,原始 VM 不需要运行。
- name: Create a full clone of a VM vmware.vmware_rest.vcenter_vm: placement: datastore: "{{ lookup('vmware.vmware_rest.datastore_moid', '/my_dc/datastore/local') }}" folder: "{{ lookup('vmware.vmware_rest.folder_moid', '/my_dc/vm') }}" resource_pool: "{{ lookup('vmware.vmware_rest.resource_pool_moid', '/my_dc/host/my_cluster/Resources') }}" state: clone source: "{{ my_vm.id }}" name: full_clone_1
与克隆不同,模板可以确保 VM 从静态 VM 映像继承。vmware.vmware_rest 集合使我们能够准备 OVF 包,并且从 2.2.0 版本开始,我们还可以准备模板 VM。
我们可以将 VM 导出为 OVF 包并将包上传到内容库。如果您想准备将在 vSphere 基础设施中重复使用的标准模板,这将非常方便。此外,OVF 包可以从一个 vSphere 下载并重新上传到另一个 vSphere 中。
在本例中,我们使用 Ansible 来准备 OVF 包。在本例中,my_vm 正在运行,内容库名为 my_library_on_nfs。
- name: List all Local Content Library vmware.vmware_rest.content_locallibrary_info: register: all_content_libraries - name: Use the name to identify the right Content Library set_fact: nfs_lib: "{{ all_content_libraries.value | selectattr('name', 'equalto', 'my_library_on_nfs')|first }}" - name: Export the VM as an OVF on the library vmware.vmware_rest.vcenter_ovf_libraryitem: session_timeout: 2900 source: type: VirtualMachine id: "{{ my_vm.id }}" target: library_id: "{{ nfs_lib.id }}" create_spec: name: golden_image description: an OVF example flags: [] state: present
要基于此 OVF 包生成新的 VM,您首先需要在内容库中识别其项目条目。
- name: Get the list of items of the NFS library vmware.vmware_rest.content_library_item_info: library_id: '{{ nfs_lib.id }}' register: lib_items - name: Define a new fact with the golden image ID ansible.builtin.set_fact: golden_image_id: '{{ (lib_items.value|selectattr("name", "equalto", "golden_image")|first).id }}'
获得项目 ID 后,我们可以调用 vcenter_ovf_libraryitem
来生成新的 VM。由于 ID 是不可变的,因此我们可以将其保存以备将来使用。
- name: Create a new VM based on the OVF vmware.vmware_rest.vcenter_ovf_libraryitem: ovf_library_item_id: '{{ golden_image_id }}' state: deploy target: resource_pool_id: "{{ lookup('vmware.vmware_rest.resource_pool_moid', '/my_dc/host/my_cluster/Resources') }}" deployment_spec: name: my_vm_from_ovf accept_all_EULA: true storage_provisioning: thin
模板创建使用 vmware.vmware_rest.vcenter_vmtemplate_libraryitems
模块的一次调用完成。此模块在 vmware_rest 集合 2.2.0 中引入。
在这里,nfs_lib
是您的内容库,您的 VM 详细信息已注册在 my_vm
变量中。
- name: Create a VM template on the library vmware.vmware_rest.vcenter_vmtemplate_libraryitems: name: golden-template library: "{{ nfs_lib.id }}" source_vm: "{{ my_vm.id }}" placement: cluster: "{{ lookup('vmware.vmware_rest.cluster_moid', '/my_dc/host/my_cluster') }}" folder: "{{ lookup('vmware.vmware_rest.folder_moid', '/my_dc/vm') }}" resource_pool: "{{ lookup('vmware.vmware_rest.resource_pool_moid', '/my_dc/host/my_cluster/Resources') }}"
要基于此模板生成新的 VM,我们再次需要识别内容库中的项目。
- name: Get the list of items of the NFS library vmware.vmware_rest.content_library_item_info: library_id: '{{ nfs_lib.id }}' register: lib_items - name: Use the name to identify the item set_fact: my_template_item: "{{ lib_items.value | selectattr('name', 'equalto', 'golden-template')|first }}"
我们使用相同的模块进行部署
- name: Deploy a new VM based on the template vmware.vmware_rest.vcenter_vmtemplate_libraryitems: name: vm-from-template library: "{{ nfs_lib.id }}" template_library_item: "{{ my_template_item.id }}" placement: cluster: "{{ lookup('vmware.vmware_rest.cluster_moid', '/my_dc/host/my_cluster') }}" folder: "{{ lookup('vmware.vmware_rest.folder_moid', '/my_dc/vm') }}" resource_pool: "{{ lookup('vmware.vmware_rest.resource_pool_moid', '/my_dc/host/my_cluster/Resources') }}" state: deploy
总之,只需几个 Ansible 任务,我们就可以将现有 VM 提升为模板。这使我们能够依赖 Ansible 来自动化我们的 VM 模板维护并确保流程的可重复性。