我在Ansible中执行以下任务:
class Company(tk.Toplevel):
def __init__(self):
self.init_ui()
def init_ui(self):
company_name_lbl = ttk.Label(self, text="Company Name").grid(
row=1, column=0, sticky='w')
self.company_name_entry = ttk.Entry(self)
self.company_name_entry.grid(row=1, column=1)
company_address_lbl = ttk.Label(self, text="Company Address").grid(
row=1, column=0, sticky='w')
self.company_address_entry = ttk.Entry(self)
self.company_address_entry.grid(row=1, column=1)
save_btn = ttk.Button(self, text="Save", command=self.insert_to_sql)
def insert_to_sql(self):
value_list = ["NULL", self.company_name_entry.get(), self.company_address_entry.get()]
column_header_list = ["company_id", "name", "adress"]
sql = SQLCommands()
for i in range(len(value_list)):
sql.insert(table="companies", column=column_header_list[i], value=value_list[i])
如您所见,它进行Web服务调用,将SOAP响应转换为JSON,然后提取相关值(整数)并将其设置为事实。我需要重复此代码块,直到上述整数值等于某个整数为止。
关于如何处理此任务的任何想法?
答案 0 :(得分:0)
如果响应采用JSON格式,那么使用until
来执行ans do-until loop会很容易实现。
但是,这是一个带有xml响应的有效示例。
先决条件:(确保在ansible主机上安装了python依赖项)
1)使用自定义xml_to_json过滤器。
2)使用json_query过滤器
P.S。由于已经满足until
的条件,因此执行后续播放不会触发重试。
如果要测试重试是否正常,请更改until
条件或请求标头中的tag值。
---
- name: Retry url until xml content equals certain value
hosts: 127.0.0.1
connection: local
become_user: root
become: yes
tasks:
- name: Check job status
uri:
url: "https://httpbin.org/anything"
method: GET
timeout: 10
validate_certs: no
headers:
content: "<envelope><body><request><status>2</status></request></body></envelope>"
register: get_search_job_status_response
until: get_search_job_status_response.json.headers.Content|from_xml|json_query('envelope.body.request.status')|int == 2
retries: 2
delay: 2
...