溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

openstack工作流workflows的使用原理是什么

發(fā)布時(shí)間:2021-11-10 17:57:08 來(lái)源:億速云 閱讀:140 作者:柒染 欄目:云計(jì)算

今天就跟大家聊聊有關(guān) openstack工作流workflows的使用原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Workflows

工作流是復(fù)雜的forms(表單)和tabs,每一個(gè)workflow必須包含   Workflow , Step  和  Action


下面舉例講解  workflow用法:


接下來(lái)的例子講解了數(shù)據(jù)是如何從urls、views、workflows、templates之間互相傳遞的

  1. 在 urls.py中, 定義了一個(gè)參數(shù). 例如. resource_class_id.

    RESOURCE_CLASS = r'^(?P<resource_class_id>[^/]+)/%s$'urlpatterns = patterns('',
    url(RESOURCE_CLASS % 'update', UpdateView.as_view(), name='update'))

     

  2. 在views.py中,我們可以傳遞數(shù)據(jù)到template(模板)和action(form)中。(action 也能夠傳遞數(shù)據(jù)到get_context_data 方法或者template中)

    class UpdateView(workflows.WorkflowView):
        workflow_class = UpdateResourceClassdef get_context_data(self, **kwargs):
            context = super(UpdateView, self).get_context_data(**kwargs)# url中的數(shù)據(jù)通常在self.kwargs中,這里我們可以將數(shù)據(jù)傳遞給template.url


    context["resource_class_id"] = self.kwargs['resource_class_id']# 數(shù)據(jù)來(lái)源于Workflow's Steps,且保存在context['workflow'].context列表中,我們同樣可以在template 中使用它們


            return contextdef _get_object(self, *args, **kwargs):#url中的數(shù)據(jù)通常在self.kwargs中,我們能夠在這里加載感興趣的對(duì)象resource_class_id = self.kwargs['resource_class_id']# eg:my_objects = api.nova.get_by_id(resource_class_id)


            def get_initial(self):
            resource_class = self._get_object()# 此處的數(shù)據(jù)可以被Action的方法以及Workflow's handle方法使用,但是steps必須depend on該值return {'resource_class_id': resource_class.id,'name': resource_class.name,'service_type': resource_class.service_type}

     

  3. 在workflows.py中,我們處理數(shù)據(jù),workflows本質(zhì)就是一個(gè)更加復(fù)雜的django form(表單)

    class ResourcesAction(workflows.Action):# 下述定義的name域值 在所有的action 方法中都可以獲取# 假若我們期望此值能夠在其他steps或者其他workflow中使用,它必須來(lái)源于當(dāng)前step,且建立depend on在其他step中 name = forms.CharField(max_length=255,
                               label=_("Testing Name"),
                               help_text="",
                               required=True)def handle(self, request, data):pass# 如果想使用url中參數(shù)值,在該Action對(duì)應(yīng)的step中必須建立depend on關(guān)系


    # 可以self.initial['resource_class_id'] or data['resource_class_id']獲取值# 如果我們想使用其他step中的數(shù)據(jù),那么其他step 必須contribute 數(shù)據(jù),且兩個(gè)step之間是有序的 class UpdateResources(workflows.Step):# 此處傳遞Workflow 的數(shù)據(jù)到action方法handle/clean中,action中想要使用的值,此處depends_on 必須要定義

    # Workflow 的context 數(shù)據(jù)包括url中的數(shù)據(jù)以及從其他step中contributed 過(guò)來(lái)的數(shù)據(jù)depends_on = ("resource_class_id",)# 通過(guò)contributes 參數(shù),此處的數(shù)據(jù)可以被其他workflow或者其他step使用,值得注意的是,object_ids key需要手動(dòng)添加到contributes 中 
     
       contributes = ("resources_object_ids", "name")def contribute(self, data, context):# 此處能獲取workflow的http request數(shù)據(jù)request = self.workflow.requestif data:# 只有在action中定義的數(shù)據(jù)此處才能獲取,如果想獲取其他值,則需要覆蓋contribute 方法,手動(dòng)添加到字典里context["resources_object_ids"] =\
                   request.POST.getlist("resources_object_ids")# 合并上面?zhèn)鬟f來(lái)的數(shù)據(jù),也可以交給父類去合并

      context.update(data)return contextclass UpdateResourceClass(workflows.Workflow):
        default_steps = (UpdateResources,)def handle(self, request, data):pass# 這個(gè)方法在最后執(zhí)行(所有Action的handle方法之后)
            # 此處可以使用step中所有'contributes=' 和'depends_on=' 的數(shù)據(jù)# 此處可以處理復(fù)雜的業(yè)務(wù)邏輯#此處可用值: data["resources_object_ids"], data["name"] data["resources_class_id"]

看完上述內(nèi)容,你們對(duì) openstack工作流workflows的使用原理是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI