999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于openstack的虛擬機(jī)定時(shí)任務(wù)的設(shè)計(jì)與實(shí)現(xiàn)

2015-09-09 18:24:56張梁羅宇

張梁+羅宇

摘?要:本文致力于為openstack設(shè)計(jì)一個(gè)可以設(shè)定虛擬機(jī)實(shí)例定時(shí)運(yùn)行功能的插件。該插件是基于openstack的horizon組件的功能拓展,用戶可以像以往使用horizon的dashboard的功能一樣去使用它。用戶通過這個(gè)組件可以設(shè)定每一天虛擬機(jī)運(yùn)行的起止時(shí)間,以及每周需要哪幾天運(yùn)行的周期循環(huán)時(shí)間。整個(gè)插件的設(shè)計(jì)完全遵循Django的設(shè)計(jì)原則。

關(guān)鍵詞:openstack;虛擬機(jī)定時(shí)任務(wù);horizon?dashboard;Django

Design?and?implement?the?instance?timing?running?based?on?openstack

Zhang?Liang1,?Luo?Yu2

(1.?School?of?Computer,Nation?University?of?Defense?Technology,Changsha?410073,China;2.?School?of?Computer,Nation?University?of?Defense?Technology,Changsha?410073,China)

Abstract:This?paper?contribute?to?design?a?plugin?for?openstack?to?implement?the?function?of?setting?the?time?of?some?instance's?running.The?plugin?is?designed?based?on?horizon?dashboard,the?users?can?operate?it?the?same?as?them?use?dashboard.User?not?only?could?set?the?time?of?start?and?suspend?of?some?instance?easily?by?it,but?also?choose?day?of?the?week?as?he?want.The?designing?model?follow?the?principle?of?Django?complete.

Key?words:?openstack;setting?instance?timing?running;horizon?dashboard;Django

0引言

由于云計(jì)算技術(shù)所具有的資源調(diào)配靈活,節(jié)約硬件、人員、管理成本,對(duì)于計(jì)算資源的高利用率,數(shù)據(jù)可靠性高,平臺(tái)管理的高度集約性等眾多突出優(yōu)勢(shì),如今不僅僅是提供公有云服務(wù)的大型云服務(wù)企業(yè),還是搭建私有云供自身使用的政企科研教學(xué)單位都對(duì)其趨之如騖。

而openstack則是為企事業(yè)單位提供云平臺(tái)的一個(gè)絕佳選擇,這主要得益于openstack是完全開源的項(xiàng)目,有諸如RedHat、HP、IBM、Rackspace、Citrix、Intel、Cisco等眾多科技領(lǐng)頭企業(yè)的鼎力支持,在技術(shù)得到保障的同時(shí)又不必?fù)?dān)心代碼會(huì)被某個(gè)獨(dú)家企業(yè)所壟斷而陷入付費(fèi)的桎梏。

openstack簡(jiǎn)介。整個(gè)openstack的架構(gòu)是一個(gè)典型的分布結(jié)構(gòu)。openstack主要由Nova,glance,Swift,keystone,horizon,cinder,?neutron?,heat等組件構(gòu)成。其中Nova負(fù)責(zé)對(duì)所建虛擬機(jī)整個(gè)生命周期的管理例如從虛擬機(jī)創(chuàng)建,虛擬機(jī)的調(diào)度分配,控制虛擬機(jī)的運(yùn)行,快照的生成,卷的管理等,主要起到了云控制器的作用,本課題也要與Nova提供的API服務(wù)打交道。glance組件則是對(duì)于鏡像存儲(chǔ)的管理。Swift提供對(duì)象存儲(chǔ)系統(tǒng)。cinder提供塊存儲(chǔ)。keystone為云主機(jī)Nova,鏡像管理glance,對(duì)象存儲(chǔ)Swift和界面horizon提供認(rèn)證服務(wù),主要工作內(nèi)容包括對(duì)用戶信息管理(包括用戶,租戶基本信息),項(xiàng)目project的管理。登陸認(rèn)證,用戶權(quán)限管理。本課題的開發(fā)內(nèi)容就涉及到用戶身份認(rèn)證以及虛擬機(jī)認(rèn)證令牌的申請(qǐng)獲取。horizon則是則是為終端用戶(云平臺(tái)管理員和普通用戶)提供使用云平臺(tái)的界面。本課題的交互界面開發(fā)也是完全基于horizon組件的。neutron則是為虛擬機(jī)分配網(wǎng)絡(luò)。heat則是提供對(duì)于虛擬機(jī)實(shí)例上的軟件的簡(jiǎn)單的部署、配置管理功能。

普通用戶對(duì)于openstack的功能使用一般都會(huì)通過horizon組件提供的dashboard(如圖1)界面去獲得,dashboard就充當(dāng)了openstack提供給普通用戶的UI。從dashboard中可以找到一些對(duì)于openstack的基本操作,如創(chuàng)建虛擬機(jī),編輯虛擬機(jī),啟動(dòng)、停止虛擬機(jī),給虛擬機(jī)做快照等等,但是缺乏定時(shí)運(yùn)行虛擬機(jī)的功能。在虛擬機(jī)的實(shí)際應(yīng)用中,具體某個(gè)實(shí)例的運(yùn)行時(shí)段是跟使用虛擬機(jī)人員的工作作息時(shí)間或者虛擬機(jī)的使用計(jì)費(fèi)時(shí)段密切相關(guān),例如說某人早上8點(diǎn)開始上班需要啟動(dòng)若干虛擬機(jī),等到下午6點(diǎn)下班后對(duì)其的使用就結(jié)束了,但是第二天還得接著當(dāng)天的工作繼續(xù)進(jìn)行——也就是說當(dāng)天的工作現(xiàn)場(chǎng)還得繼續(xù)保留以待第二天繼續(xù)使用,事實(shí)上這里還有另外一個(gè)優(yōu)點(diǎn),由于虛擬機(jī)啟動(dòng)時(shí)間受制于本地磁盤性能(如果是遠(yuǎn)程啟動(dòng)更要受制于帶寬限制),如果實(shí)例較大往往需要較長(zhǎng)的等待時(shí)間,所以使用者可以提前設(shè)置虛擬機(jī)啟動(dòng),使用者進(jìn)入工作現(xiàn)場(chǎng)時(shí)候就直接能夠使用,這樣是用戶體驗(yàn)得到明顯改善。云平臺(tái)下的某些租用計(jì)費(fèi)方式一般是按量、按時(shí)計(jì)費(fèi)——也就說是按照使用虛擬資源的多少以及占用計(jì)算存儲(chǔ)資源時(shí)長(zhǎng)來計(jì)費(fèi)的。企業(yè)個(gè)人在某些時(shí)段可能就不需要使用虛擬機(jī),這個(gè)時(shí)候選擇將其停止,運(yùn)行實(shí)例退出內(nèi)存,運(yùn)行現(xiàn)場(chǎng)保留到磁盤中騰出了運(yùn)行資源也退出了計(jì)費(fèi)狀態(tài)。

圖(1)

從以上列舉分析的案例可以看出,為openstack設(shè)計(jì)開發(fā)虛擬機(jī)定時(shí)任務(wù)功能很有實(shí)際意義,本文就是著力詳細(xì)解析決基于openstack虛擬機(jī)定時(shí)任務(wù)的完整方案。

1軟件需求分析

1.1人機(jī)交互需求

openstack本身的交互方式的架構(gòu)為典型的B/S架構(gòu)。用戶通過瀏覽器訪問horizon組件內(nèi)置的web服務(wù)器,web服務(wù)器提供的一個(gè)訪問界面被稱作dashboard,dashboard提供了各種對(duì)于openstack的操作,這些操作大致分類為:對(duì)于鏡像的操作,對(duì)于虛擬機(jī)的操作,對(duì)于卷的操作,網(wǎng)絡(luò)的設(shè)置,域及用戶權(quán)限的設(shè)置。顯然,為了交互的一致性、跟便捷性,新增的“虛擬機(jī)定時(shí)任務(wù)”功能應(yīng)該放在與對(duì)虛擬機(jī)操作的按鈕列表欄(如圖2所示)。為了在點(diǎn)擊設(shè)置定時(shí)任務(wù)按鈕后,將會(huì)彈出一個(gè)時(shí)間設(shè)置頁面(如圖3所示),讓用戶通過點(diǎn)擊下拉列表去設(shè)置啟、停的時(shí)間。對(duì)于“星期幾”運(yùn)行的設(shè)置,由于星期是全排列的復(fù)選組合方式,所以設(shè)置選取“星期幾”的時(shí)候則使用復(fù)選框。為了保持風(fēng)格的一致性,使用的對(duì)話框、下拉列表與復(fù)選框均與dashboard使用的一致

圖(2)

圖(3)

1.2數(shù)據(jù)傳輸?shù)男枨?/p>

web前端的用戶數(shù)據(jù)主要有四類:(1)用戶ID信息以及所屬于工程及域。(2)虛擬機(jī)實(shí)例的信息,主要包括實(shí)例ID號(hào),空間大小,系統(tǒng)類型等。(3)用戶輸入的啟動(dòng)時(shí)間信息,主要包括啟動(dòng)以及停止實(shí)例的時(shí)(24小時(shí)制)、分,以及星期一至星期天復(fù)選項(xiàng)等信息。(4)確認(rèn)信息的數(shù)據(jù)傳輸,按下確認(rèn)按鈕后的信息的的傳輸。

1.3數(shù)據(jù)存儲(chǔ)的需求

web前端的用戶數(shù)據(jù)傳輸?shù)椒?wù)器后臺(tái)之后,一些重要的數(shù)據(jù)如登陸用戶信息、使用虛擬機(jī)實(shí)例的信息、用戶定時(shí)信息、用戶操作日志、組件出錯(cuò)信息都要被存儲(chǔ)。

1.4業(yè)務(wù)功能需求

本組件要完成的功能主要有:(1)虛擬機(jī)運(yùn)行任務(wù)的定時(shí)。(2)定時(shí)任務(wù)到點(diǎn)后對(duì)于啟動(dòng)或者停止虛擬機(jī)腳本的觸發(fā)。(3)啟動(dòng)、停止虛擬機(jī)腳本。

2技術(shù)實(shí)現(xiàn)方案

從上一部分需求分析的結(jié)論我們可以將整個(gè)軟件的分為“人機(jī)交互模塊”跟“任務(wù)處理模塊”,“人機(jī)交互模塊”主要提供人機(jī)交互UI界面跟界面上數(shù)據(jù)的傳遞,而“任務(wù)處理模塊”則是接收處理從web前端傳遞來的數(shù)據(jù),完成業(yè)務(wù)邏輯。

2.1人機(jī)交互模塊的技術(shù)實(shí)現(xiàn)

openstack是由horizon組件來提供一個(gè)命名為dashboard的基于網(wǎng)頁交互界面。整個(gè)dashboard是在Django框架下設(shè)計(jì)開發(fā)的,很顯然新增的業(yè)務(wù)功能必須在同樣的框架下開發(fā)。Django本身推崇“MTC模式”,在所謂“MTC模式”中M(model)代表數(shù)據(jù)據(jù)訪問部分,通過Django的數(shù)據(jù)庫(kù)層處理?;T(template)選擇數(shù)據(jù)并決定怎樣呈現(xiàn)的部分,通過視圖和模板來處理?;C(control)控制部分通過Django框架本身的URL配置和對(duì)Python方法的調(diào)用來處理?。其中“C”是Django框架本身提供的機(jī)制來處理,而Django的重點(diǎn)就在于模型,模板和視圖。

2.1.1設(shè)置頁面的按鈕設(shè)計(jì)

dashboard本身就是在MTC模式下高度面向?qū)ο蠡O(shè)計(jì)的,且采取自頂向下的設(shè)計(jì)風(fēng)格。從繼承關(guān)系看分為:Dashboard?→?PanelGroup?→?Panel這樣三層關(guān)系。Horizon中現(xiàn)有的dashboard有4個(gè),分別是project?——普通用戶登陸后看到的項(xiàng)目面板;admin?——管理登陸后可見,左側(cè)的管理員面板;settings?——右上角的設(shè)置面板,里面可設(shè)置語言,時(shí)區(qū),更改密碼;router(配置文件中將profile_support打開可見),ciso?nexus?1000v的管理面板。每一個(gè)dashboard都是django中的一個(gè)app,django中的app可以理解成對(duì)業(yè)務(wù)邏輯模塊化的一種手段,里面可以包含自己獨(dú)有的url設(shè)定,模板,和業(yè)務(wù)邏輯代碼。每個(gè)dashboard下定義了一系列的PanelGroup,虛擬機(jī)管理對(duì)應(yīng)到界面上就是一個(gè)PanelGroup(Manage?Compute),?而這個(gè)PanelGroup里面有一系列的子panel(例如:Overview,?Instances,?Volumes…)。而我們要新增的虛擬機(jī)定時(shí)任務(wù)的啟動(dòng)按鈕就是要放在這個(gè)Instances這個(gè)子panel上面。如圖4所示,在instances這個(gè)panel上面就出現(xiàn)了諸如解除浮動(dòng)IP的綁定、編輯云主機(jī)、編輯安全組、控制臺(tái)、查看日志、停止云主機(jī)等選項(xiàng),設(shè)置虛擬機(jī)定時(shí)任務(wù)時(shí)間按鈕置于最下方。要往panel上添加按鈕必須在horizon/openstack_dashboard/dashboards/project/instances目錄下的tables.py文件里添加一個(gè)類,我們命名它為SetTime類,由于這個(gè)按鈕是一個(gè)鏈接性質(zhì)的,這個(gè)類必須從tables.LinkAction繼承,SetTime類必須具有指代名(name),詳細(xì)名(verbose_name,用于顯示時(shí)候的名稱),以及url(用于標(biāo)示這個(gè)按鈕的位置)三個(gè)必須的私有屬性。對(duì)于name這個(gè)屬性我們可以賦予settime(可閱讀性好)。verbose_name賦予Set?Instance?Lanuch?Time,這個(gè)名稱將會(huì)顯示在instance的panel上。URL則被賦予“horizon:project:instances:settime”。還有一個(gè)鏈接指示函數(shù),通常命名為get_link_url(),這個(gè)函數(shù)是告訴Django去尋找并解析這個(gè)url的路徑值,作用就是找到“Set?Instance?Lanuch?Time”按鈕指向的頁面。還必須在同文件中一個(gè)Meta類中注冊(cè)SetTime這個(gè)按鈕,將其寫進(jìn)row_actions這個(gè)元組當(dāng)中去,這樣這個(gè)按鈕的圖標(biāo)才能被顯示出。

2.1.2設(shè)置對(duì)話框的設(shè)計(jì)

接著要設(shè)計(jì)出按鈕觸發(fā)的設(shè)計(jì)時(shí)間的對(duì)話框。對(duì)話框必須有起止的時(shí)間,星期數(shù),確定的按鈕。如圖6所示。Django遵循MTC設(shè)計(jì)模式,視圖的內(nèi)容(被稱為context)均由模板來修飾。對(duì)話框就是一個(gè)典型的視圖,要設(shè)計(jì)這個(gè)視圖首先必須有一個(gè)視圖類(這里我們命名為:SetTimeView),這個(gè)類當(dāng)中有幾個(gè)必須的私有屬性,一個(gè)唄命名為from_class,它必須去繼承一個(gè)設(shè)計(jì)好的視圖。另一個(gè)屬性則是模板名字template_name,這個(gè)私有屬性獲得模板的路徑。另外還有個(gè)被命名為success_url的屬性,它的作用當(dāng)你點(diǎn)擊上文提到的“確定”按鈕時(shí)候服務(wù)器就會(huì)去根據(jù)success_url的值去尋找視圖。除了以上三個(gè)必須的私有屬性外還必須有一個(gè)獲取模板所修飾的對(duì)象——上下文——context的函數(shù),這個(gè)函數(shù)主要作用就是獲取模板修飾的上下文。

接下來就是設(shè)計(jì)下拉條(設(shè)置時(shí)間),復(fù)選框(設(shè)計(jì)星期)跟確認(rèn)按鈕這些UI組件。首先必須在找到horizon/openstack_dashboard/dashboards/project/instances這個(gè)文件夾,進(jìn)入forms.py文件,下拉列表選用ChoiceField插件,只需在ChoiceField屬性內(nèi)填充一個(gè)label為欲設(shè)計(jì)的下拉列表的標(biāo)題名稱,以及窗口名字的設(shè)置class為‘set?time即可,其他可以使用默認(rèn)參數(shù)。例如設(shè)計(jì)哪個(gè)小時(shí)啟動(dòng)的下拉列表,LaunchHour?=?forms.?ChoiceField(label=_("hour"),widget=fields.SelectWidget(attrs={'class'=:'set?time'},data_attrs=('size','display-name'),transform=_image_choice_title))。同法設(shè)置其他時(shí)間選取下拉列表。再來設(shè)計(jì)星期幾的復(fù)選框,復(fù)選框使用MultipleChoiceField插件

,在其choice參數(shù)賦予子選項(xiàng)所組成的元組,如choices=list_choices,?list_choices?=?(('1',?Monday),('2','Tuesday'),('3','Wednesday'),('4','Thursday'),('5','Friday'),('6','Saturday')?,('7','Sunday'))。用request.REQUEST.getlist函數(shù)去取的選中的值。最后還要設(shè)計(jì)一個(gè)HTML文件。由于horizon高度模塊化的設(shè)計(jì),視圖函數(shù)與HTML文件是分離的,這樣視圖函數(shù)就會(huì)比較靈活能隨時(shí)替換以及修改,這里需要在HTML文件設(shè)計(jì)一下任務(wù)時(shí)間彈出設(shè)置框網(wǎng)頁的網(wǎng)頁標(biāo)題,顯示方式,以及一個(gè)“確認(rèn)”按鈕即可。到此整個(gè)組件的網(wǎng)頁的UI部分設(shè)計(jì)完畢。

2.2數(shù)據(jù)傳輸模式

在這里要處理的數(shù)據(jù)傳輸主要是前段的用戶數(shù)據(jù)傳輸?shù)胶蠖颂幚怼.?dāng)前段用戶數(shù)據(jù)設(shè)定完成后,按下“確定”按鈕會(huì)觸發(fā)一個(gè)post函數(shù)方法將數(shù)據(jù)打包經(jīng)由HTTP協(xié)議發(fā)送至后端,后端的get方法會(huì)得到這些數(shù)據(jù)并交由相應(yīng)的模塊處理

2.3后臺(tái)業(yè)務(wù)邏輯處理

圖(4)

后臺(tái)的業(yè)務(wù)流程如圖4所示。用戶前端網(wǎng)頁的數(shù)據(jù)傳給定時(shí)器,定時(shí)器設(shè)置自身的數(shù)據(jù)設(shè)置計(jì)時(shí),時(shí)間到點(diǎn)后去觸發(fā)啟動(dòng)/停止腳本,與此同時(shí)數(shù)據(jù)庫(kù)還會(huì)將用戶的數(shù)據(jù)(用戶ID,每個(gè)ID下對(duì)應(yīng)的實(shí)例,定時(shí)信息)以及操作的行為記錄下來。

2.3.1定時(shí)器的設(shè)計(jì)說

openstack目前只能安裝在Linux內(nèi)核系列的系統(tǒng)上,在常見的Linux內(nèi)核系統(tǒng)(如Ubuntu,RedHat,centos,federal等)一般都有一個(gè)非常實(shí)用的定時(shí)組件叫crontab。crontab可以較為方便、穩(wěn)定、準(zhǔn)確的實(shí)現(xiàn)定時(shí)任務(wù)執(zhí)行。使用crontab分為兩步:1、只需將諸如“*?*?*?*?*?something.py”的文本寫入一個(gè)文件,其中五個(gè)*符號(hào)順序依次代表分鐘(0-59)、小時(shí)(0-23)、日期(1-31)、月份(1-12)、星期幾(0-6),最后面的something.py文件代表要去執(zhí)行的命令或者程序(可以使多條命令或者程序),當(dāng)然對(duì)時(shí)間的設(shè)置其實(shí)有相當(dāng)大的靈活性,比如可以進(jìn)行幾個(gè)小時(shí)或者分鐘的間隔設(shè)置,可以指定某段時(shí)間執(zhí)行,本文在此就不詳細(xì)敘述。2、執(zhí)行crontab?something.py文件定時(shí)任務(wù)即可生效。這里還有一個(gè)問題,就是這個(gè)crontab文件由誰,如何去產(chǎn)生,其實(shí)完全可以把這個(gè)任務(wù)交給之前的SetTimeForm類里去編碼執(zhí)行,這個(gè)類的作用原本是設(shè)計(jì)彈出設(shè)置時(shí)間的頁面,在這個(gè)類里有個(gè)handle()函數(shù),這個(gè)函數(shù)起到兩個(gè)非常重要的作用,一是向其他文件構(gòu)共享出用戶設(shè)置的時(shí)間變量,起到通信作用。二是向需要生成crontab文件注入啟動(dòng)/停止的時(shí)間周期以及到時(shí)間點(diǎn)需要執(zhí)行的腳本。

2.3.2啟動(dòng)/停止腳本

現(xiàn)在來現(xiàn)對(duì)于虛擬機(jī)實(shí)例的啟動(dòng)/停止(這里的停止是將其整個(gè)虛擬機(jī)運(yùn)行現(xiàn)場(chǎng)保存至硬盤,在虛擬機(jī)監(jiān)視器看來并沒有真的停止它),要自己通過代碼去控制一個(gè)虛擬機(jī)的啟動(dòng)/停止有兩種途徑,一種是通過openstack官方給出API函數(shù)接口去實(shí)現(xiàn),使用的方法是:首先必須使用你的證書來認(rèn)證來獲取authentication?token。證書包含了用戶名、密碼和tenant(項(xiàng)目)。而這個(gè)證書則可以通過curl+租戶名+用戶名+密碼+本機(jī)ip地址去獲得(具體格式參考o(jì)penstack官網(wǎng))。token允許你不需要再次認(rèn)證就能和其他的service?endpoints交互。Tokens通常只有24小時(shí)的生命期,當(dāng)token過期后,你將會(huì)收到一個(gè)401(未被授權(quán)的)響應(yīng),這時(shí)候必須重新請(qǐng)求一個(gè)token。利用這個(gè)token就可以去使用openstack的服務(wù),停止虛擬機(jī)的命令如下:nova?suspend?--flavor?2?--key_name?oskey?--image?ea3ffba1-065e-483f-bfe2-c84184ee76be(這串字符為image的id)。第二種方法是通過novaclient提供的命令行工具去執(zhí)行命令。具體做法如下:從openstack本身提供的novaclient.v1_1模塊import一個(gè)client包創(chuàng)建并且初始化一個(gè)nt=client.Client("用戶名","密碼","站點(diǎn)IP地址"),調(diào)用nt的servers的屬性方法nt.servers.suspend("虛擬機(jī)實(shí)例的ID")即可。同上理,執(zhí)行這個(gè)命令暫時(shí)借用超級(jí)管理員身份。

這里要注意一個(gè)問題,對(duì)于虛擬機(jī)運(yùn)行時(shí)間的設(shè)置的用戶的身份一般都是普通用戶,而普通用戶很可能(取決于該用戶所屬于租戶所賦予的角色權(quán)利,但是普通用戶往往權(quán)限較低)是不能直接去使用某些服務(wù),為了統(tǒng)一、簡(jiǎn)潔的解決這個(gè)問題,在啟動(dòng)/停止腳本中暫時(shí)借用admin身份去使用某些服務(wù)

3總結(jié)

本文致力于為openstack設(shè)計(jì)一個(gè)虛擬機(jī)定時(shí)任務(wù)組件,本組件基于horizon項(xiàng)目,完全遵循Django的設(shè)計(jì)開發(fā)模式,能輕易滿足具備openstack使用經(jīng)驗(yàn)用戶的習(xí)慣。設(shè)計(jì)完畢后通過在自己實(shí)驗(yàn)室openstack的部署環(huán)境下試用測(cè)試,運(yùn)行穩(wěn)定未發(fā)現(xiàn)BUG。

主站蜘蛛池模板: 久久精品人人做人人爽电影蜜月 | 日韩一区精品视频一区二区| 欧美福利在线| 精品一區二區久久久久久久網站| 高清不卡一区二区三区香蕉| 久久国产精品无码hdav| 无码有码中文字幕| 亚洲色欲色欲www网| 久久久精品国产SM调教网站| 2020最新国产精品视频| 免费人成在线观看成人片 | 国产一在线| 999国产精品| 91色在线观看| 国产一区亚洲一区| 亚洲午夜国产精品无卡| 青青国产在线| 国产精品漂亮美女在线观看| 亚洲精品视频在线观看视频| 九九九久久国产精品| 亚洲欧美另类中文字幕| 精品伊人久久久香线蕉 | 亚洲一区网站| 亚洲天堂免费在线视频| 乱系列中文字幕在线视频| 亚洲一区二区日韩欧美gif| 国产成人精品在线| jizz在线观看| 欧美亚洲国产一区| 她的性爱视频| 久久先锋资源| 日韩一区精品视频一区二区| 国产精品播放| 亚洲国产日韩一区| 久久大香伊蕉在人线观看热2| 91亚洲精选| 在线精品欧美日韩| 国产久操视频| 亚洲最大在线观看| 伊伊人成亚洲综合人网7777| 91青青草视频在线观看的| 2024av在线无码中文最新| 性色一区| 日韩激情成人| 亚洲综合天堂网| 精品人妻AV区| 中文字幕2区| 九色最新网址| 国产激情无码一区二区APP| 全部无卡免费的毛片在线看| 丁香婷婷激情综合激情| 日本一区高清| 午夜欧美在线| 国产青榴视频| 欧美精品亚洲精品日韩专区| 亚洲久悠悠色悠在线播放| 91精品国产无线乱码在线| 国产免费久久精品99re不卡| 国产成人禁片在线观看| 日本在线亚洲| 国产欧美亚洲精品第3页在线| 99伊人精品| 久久黄色免费电影| 亚洲综合香蕉| 日韩小视频在线观看| 亚洲人成影院在线观看| 91美女视频在线| 久久久久人妻精品一区三寸蜜桃| 一本大道香蕉久中文在线播放| 欧美伦理一区| 最新加勒比隔壁人妻| 亚洲欧洲国产成人综合不卡| 人妻无码一区二区视频| 婷婷色婷婷| 最新亚洲人成网站在线观看| 99久久精品免费观看国产| 成人福利视频网| 国产精品丝袜在线| 人妻丰满熟妇αv无码| 青青草一区| 亚洲制服中文字幕一区二区| 国产超薄肉色丝袜网站|