> 文档中心 > DO447使用Ansible与API通信--使用Ansible剧本与Api交互

DO447使用Ansible与API通信--使用Ansible剧本与Api交互


DO447使用Ansible与API通信–使用Ansible剧本与Api交互

🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥

🎈支持我:可点赞👍、可收藏⭐️、可留言📝

文章目录

    • DO447使用Ansible与API通信--使用Ansible剧本与Api交互
      • 📜11.2.1 与API交互
        • 📑GET
        • 📑POST
        • 📑PUT
        • 📑DELETE
        • 📑PATCH
      • 📜11.2.2 将信息发送到API
      • 📜11.2.3 处理API的响应
      • 📜11.2.4 HTTP安全性设置
      • 📜11.2.5 使用过滤器准备和解析数据
      • 📜11.2.6 课本练习
        • 📑1. 按要求拉取实验代码。
        • 📑2. 查看对应的清单文件
        • 📑3. 修改tower_copy_template.yml 剧本。
        • 注意:
        • 📑4. 修改tower_add_survey.yml剧本将一个调查添加到作业模板并激活它。
        • 📑5. 修改tower_template_cleanup.yml剧本删除复制的模板。
        • 📑6. 更新代码。
        • 📑7. 清空实验
    • 📜11.3 章节实验
        • 📑1. 拉取实验代码。
        • 📑2. 按要求,创建模板副本。
        • 📑3. 执行剧本。
        • 📑4. 修改提供的template_cleanup.yml的剧本删除原来的新模板模板。
        • 📑5. 执行剧本。
        • 📑6. 上传代码。
        • 📑7. 评分与清楚实验。
    • 💡总结

📜11.2.1 与API交互

Red Hat Ansible Engine可以与服务提供的任何HTTP API交互,包括RESTful API。由于各种原因,可能需要这种交互。例如,该服务可能位于运行Ansible托管系统的网络的外部,可能没有特定的Ansible模块来与该服务交互,或者Ansible模块可能没有公开所需的功能。

为了访问这些api, Ansible提供了uri模块。该模块连接到一个给定的URL,控制连接的参数并对响应进行操作。唯一需要的参数是url,表示要连接的HTTP或HTTPS完整url。

这是一个使用uri模块的非常简单的示例任务:

- name: Check that the page is reachable and returns a status 200 using GET  uri:    url: http://www.example.com 

但是,通常必须为Ansible模块指定method参数,该参数用于指定用于连接到服务器的HTTP方法。method参数最method的选项是:

📑GET

方法从由请求的URL标识的服务获取实体。这是默认值。


📑POST

请求服务将请求体中包含的实体存储在URL所标识的资源下。


📑PUT

请求服务将在请求体中发送的实体存储为URL标识的资源,如果存在则修改它。


📑DELETE

删除由请求的URL标识的服务中的实体。


📑PATCH

用正文中的值修改由请求URL标识的实体。只有修改后的值必须在主体中。

控制如何连接到服务的下一个选项使用headers参数。此参数是一个字典,可以将自定义HTTP头添加到请求中。例如:

headers:  Cookie: type=Test

下面是一个更高级的示例,使用到目前为止介绍的参数:

- name: Get an entity and set a Cookie  uri:    url: https://example.com/entity/1    method: GET    headers:      Cookie: type=TEST

📜11.2.2 将信息发送到API

既然知道了如何调用API,就可以开始向任何API发送信息了。发送此信息有两个互斥的参数:src和body。

src选项指向一个包含您想要发出的HTTP请求主体的文件。或者,您可以使用body选项,它用YAML语法在剧本中定义HTTP请求的正文。

根据接收服务期望的格式,您可能需要使用参数body_format。该参数的选项有:raw、json和form-urlencoded。对于REST api,使用json, 对于传统的基于表单的页面,使用form-urlencoded。

例如,登录到一个服务可以通过以下方法实现:

- name: Login to a form-based webpage  uri:    url: https://example.com/login.php    method: POST    body_format: form-urlencoded    body:      name: your_username      password: your_password      enter: Sign in

📜11.2.3 处理API的响应

任何HTTP服务返回的第一种信息是响应的状态代码。使用status _code选项告诉uri模块您期望成功时的状态代码。如果响应中的状态码不同,任务将失败。

其次,您必须处理响应本身。

如果您想将响应保存为一个文件,请使用dest参数指定该文件。

要在剧本中使用响应,请使用return_content选项来指示应该将响应体添加到结果字典中。使用register将其保存在一个变量中。

这里你可以看到一个如何使用请求响应的例子:

- name: Check the contents of the response  uri:    url: http://www.example.com  return_content: yes  register: response  failed_when: "'SUCCESS' not in response.content"

下面是另一个实际示例,它将GitLab APlv4调用返回的数据解析为Ansible中的变量。变量my_private_ token是在GitLab接口中设置的个人访问令牌,可能是从Ansible Vault保护的文件加载到剧本中。API调用返回的JSON是一个字典列表,其中每个字典包含一个用户的信息:关键用户名包含用户的用户名。
DO447使用Ansible与API通信--使用Ansible剧本与Api交互


📜11.2.4 HTTP安全性设置

uri模块还支持Digest,、Basic或WSSE身份验证,可以通过使用url_username和url_password参数来控制。如果远程服务支持基本身份验证,但此模块身份验证失败,则使用force_basic_auth参数尝试强制基本身份验证。

一个更安全的选项是使用私钥建立到服务器的安全连接。使用client_cert参数参考PEM证书链文件。如果证书链文件不包含密钥,则使用client_key参数将模块指向存储密钥的文件。

最后,如果必须避免TLS证书验证,则将validate_certs参数设置为false。此设置会降低连接的安全性。


📜11.2.5 使用过滤器准备和解析数据

在前面的章节中,您已经看到了如何使用过滤器来转换数据。在处理HTTP和REST api时,有几个过滤器非常有用。

url支持US-ASCIl字符集的一个有限子集。要确保URL被正确编码,请使用urlencode过滤器。
DO447使用Ansible与API通信--使用Ansible剧本与Api交互

to_json和from_json过滤器在封送数据到API和从API封送数据时也很有用。

xml模块还可以与过滤器一起用于处理来自某些API的数据。


📜11.2.6 课本练习

[student@workstation ~]$ lab api-interaction start

📑1. 按要求拉取实验代码。

[student@workstation ~]$ cd git-repos/[student@workstation git-repos]$ git clone http://git.lab.example.com:8081/git/api-interaction.git[student@workstation git-repos]$ cd api-interaction

📑2. 查看对应的清单文件

[student@workstation api-interaction]$ cat inventory.yml tower: # 主机组  hosts:    tower.lab.example.com:  vars:    template_name: DEV ftpservers setup# 已存在模板的名称    copy_template_name: Exact copy of DEV ftpservers setup     # 要创建的模板的名称    tower_fqdn: tower.lab.example.com      # API URL    tower_user: admin    tower_password: redhat

📑3. 修改tower_copy_template.yml 剧本。

添加任务以复制和启动作业模板。为了方便,可以在~/DO447/solutions/api-interaction/目录下找到已经编辑过的文件。

[student@workstation api-interaction]$ cp -iv ~/DO447/solutions/api-interaction/tower_copy_template.yml  .[student@workstation api-interaction]$ ansible-playbook tower_copy_template.yml --syntax-checkplaybook: tower_copy_template.yml[student@workstation api-interaction]$ ansible-playbook tower_copy_template.yml

注意:

tower_copy_template.yml 的剧本不是幂等的。如果出现错误,模板被错误地创建了,请在再次运行修正后的剧本之前删除模板。


📑4. 修改tower_add_survey.yml剧本将一个调查添加到作业模板并激活它。

为了方便,可以在~/DO447/solutions/api-interaction/ 目录下找到已经编辑过的文件。

[student@workstation api-interaction]$ cp -iv ~/DO447/solutions/api-interaction/tower_add_survey.yml  .cp: overwrite './tower_add_survey.yml'? y'/home/student/DO447/solutions/api-interaction/tower_add_survey.yml' -> './tower_add_survey.yml'[student@workstation api-interaction]$ ansible-playbook tower_add_survey.yml --syntax-checkplaybook: tower_add_survey.yml[student@workstation api-interaction]$ ansible-playbook tower_add_survey.ymlPLAY [Using the uri module to add a survey] **************************************************TASK [Add a survey to the existing Job Template using the uri module] *************************ok: [tower.lab.example.com]TASK [Enable the survey] ***************************************************************ok: [tower.lab.example.com]PLAY RECAP *****************************************************************************tower.lab.example.com      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0[student@workstation api-interaction]$ ansible-playbook tower_add_survey.yml --tags with_variable

DO447使用Ansible与API通信--使用Ansible剧本与Api交互


📑5. 修改tower_template_cleanup.yml剧本删除复制的模板。

为了方便,可以在~/DO447/solutions/api-interaction/目录下找到已经编辑过的文件。

[student@workstation api-interaction]$ cp -iv ~/DO447/solutions/api-interaction/tower_template_cleanup.yml .cp: overwrite './tower_template_cleanup.yml'? y'/home/student/DO447/solutions/api-interaction/tower_template_cleanup.yml' -> './tower_template_cleanup.yml'[student@workstation api-interaction]$ ansible-playbook tower_template_cleanup.yml --syntax-checkplaybook: tower_template_cleanup.yml[student@workstation api-interaction]$ ansible-playbook tower_template_cleanup.yml

📑6. 更新代码。

[student@workstation api-interaction]$ git add .[student@workstation api-interaction]$ git commit -m "Tower API interaction"[student@workstation api-interaction]$ git push

📑7. 清空实验

[student@workstation ~]$ lab api-interaction finish

📜11.3 章节实验

[student@workstation ~]$ lab api-review start

📑1. 拉取实验代码。

[student@workstation ~]$ cd /home/student/git-repos[student@workstation git-repos]$ git clone \http://git.lab.example.com:8081/git/api-review.git[student@workstation git-repos]$ cd api-review

📑2. 按要求,创建模板副本。

使用Ansible uri模块,使用Ansible Tower REST API创建一个现有的New模板Job模板的副本。要创建剧本,请使用本课程中的变量、过滤器和任何其他适用的Ansible最佳实践。

使用以下名称和位置来修改现有的剧本和清单。注意,名称是区分大小写的。

[student@workstation api-review]$ vim inventory.yml tower:  hosts:    tower.lab.example.com:  vars:    template_name: New template    copy_template_name: Review template    tower_fqdn: tower.lab.example.com    tower_user: simon    tower_password: redhat123[student@workstation api-review]$ vim copy_template.yml---- name: Using the uri module to connect to tower  hosts: tower  gather_facts: false  tasks:    - name: Copy the existing New template using the uri module      uri: url: "https://{{ tower_fqdn }}/api/v2/job_templates/{{ template_name | urlencode }}/copy/" validate_certs: no method: POST return_content: yes force_basic_auth: yes user: "{{ tower_user }}" password: "{{ tower_password }}" status_code: [201, 202] body:   name: "{{ copy_template_name }}" body_format: json

📑3. 执行剧本。

[student@workstation api-review]$ ansible-playbook copy_template.yml

DO447使用Ansible与API通信--使用Ansible剧本与Api交互


📑4. 修改提供的template_cleanup.yml的剧本删除原来的新模板模板。

使用DELETE方法。

[student@workstation api-review]$ vim template_cleanup.yml ---- name: Using the uri module to delete a Job Template  hosts: tower  gather_facts: false  tasks:    - name: Delete an existing Ansible Tower Job Template using the uri module      uri: url: "https://{{ tower_fqdn }}/api/v2/job_templates/{{ template_name | urlencode }}/" validate_certs: no method: DELETE return_content: yes force_basic_auth: yes user: "{{ tower_user }}" password: "{{ tower_password }}" status_code: 204

📑5. 执行剧本。

[student@workstation api-review]$ ansible-playbook template_cleanup.yml

📑6. 上传代码。

[student@workstation data-review]$ git status[student@workstation data-review]$ git add --all[student@workstation data-review]$ git commit -m "Updated review playbooks"[student@workstation data-review]$ git push

📑7. 评分与清楚实验。

[student@workstation ~]$ lab api-review grade[student@workstation ~]$ lab api-review finish

💡总结

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

DO447使用Ansible与API通信--使用Ansible剧本与Api交互

以上就是【金鱼哥】对 第十一章 使用Ansible与API通信–使用Ansible剧本与Api交互 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

DO447使用Ansible与API通信--使用Ansible剧本与Api交互