




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 Ansible 日常維護(hù)技術(shù)指南 【摘要】本文將介紹如何維護(hù)Ansible的Inventory,來(lái)管理不同業(yè)務(wù)的不同機(jī)器;如何使用Ansible的一些常用組件,完成一些基本的自動(dòng)化運(yùn)維工作;如何編寫和使用Playbook,來(lái)完成復(fù)雜環(huán)境下的自動(dòng)化運(yùn)維工作;如何利用Facts組件來(lái)采集被管客戶端的設(shè)備信息,來(lái)實(shí)現(xiàn)配置管理系統(tǒng)(CMDB)的自動(dòng)采集能力等等。1、Ansible Inventory維護(hù)Inventory文件在日常維護(hù)中,Ansible通過(guò)Inventory(可管理的主機(jī)集合),對(duì)遠(yuǎn)端服務(wù)器或者主機(jī)進(jìn)行統(tǒng)一操作和管理。在Ansible中,描述主機(jī)的默認(rèn)方法是將他們列在一個(gè)文本文件中,
2、這個(gè)文件稱為Inventory文件,默認(rèn)的路徑和文件為:/etc/ansible/hosts,可以通過(guò)ANSIBLE_HOSTS環(huán)境變量來(lái)指定,也可以在ansible.cfg文件中通過(guò)inventory參數(shù)指定,或者在運(yùn)行ansible和ansible-playbook的時(shí)候使用-i參數(shù)來(lái)臨時(shí)指定。下面舉例說(shuō)明,如何在inventory組件的/etc/ansible/hosts文件中定義主機(jī)和主機(jī)組:第一行定義了一個(gè)主機(jī)X.X.X.100,并使用inventory內(nèi)置變量ansible_ssh_pass定義了該主機(jī)的登錄密碼,如果建立了互信,則不需要這個(gè)參數(shù);第二、三、四行定義了一個(gè)名為gro
3、upname1的主機(jī)組,其中包含X.X.X.101-X.X.X.109,X.X.X.201-X.X.X.209共計(jì)18臺(tái)主機(jī);第五、六行為groupname1的主機(jī)組定義了一個(gè)共同的變量:ansible_ssh_pass,以定義該組內(nèi)所有主機(jī)的登錄密碼;第七、八行定義了一個(gè)更大的組:groupname2,其下包含了groupname1組下的所有主機(jī)。定義好之后,我們?cè)赼nsible命令行和ansible-playbook中,可以非常靈活的使用,便于批量操作。例如批量查看groupname1組下所有主機(jī)的當(dāng)前時(shí)間:ansible groupname1 -a dateInventory內(nèi)置參數(shù)除了
4、前面介紹的ansible_ssh_pass參數(shù),Ansible Inventory內(nèi)置了一些參數(shù),這些參數(shù)在我們實(shí)際工作中也會(huì)經(jīng)常使用,我們可以直接在Inventory文件中定義它。我們也可以在ansible.cfg文件中的defaults部分更改一些Inventory內(nèi)置參數(shù)的默認(rèn)值,可以支持更改的有:動(dòng)態(tài)Inventory在實(shí)際的應(yīng)用中,會(huì)存在大量的主機(jī)列表信息,如果手動(dòng)維護(hù)Ansible中的Inventory文件將會(huì)非常的繁瑣,所以支持動(dòng)態(tài)Inventory將會(huì)讓問(wèn)題變得統(tǒng)一、清晰、簡(jiǎn)單許多。動(dòng)態(tài)Inventory也就是Ansible所有的Inventory文件里面的主機(jī)列表和變量信息都
5、支持從外部拉取,例如我們常用的CMDB,我們可以通過(guò)定義的腳本,將外部CMDB等其他運(yùn)維系統(tǒng)中的主機(jī)信息同步至Ansible中。在實(shí)際的配置中僅需要更改ansible.cfg文件中的inventory參數(shù)為一個(gè)可執(zhí)行的腳本即可。defaultsinventory = /etc/ansible/inventory.sh腳本的內(nèi)容不受任何編程語(yǔ)言限制,但該腳本必須支持以下規(guī)范的參數(shù),腳本的執(zhí)行結(jié)果也有一定的要求:-list或者-l,腳本運(yùn)行該參數(shù)須顯示所有主機(jī)和組的信息(Json格式)。-host或者-H,腳本的該參數(shù)后需指定一個(gè)主機(jī),運(yùn)行結(jié)果也會(huì)返回該主機(jī)的所有信息(同樣也必須為Json格式)。
6、腳本調(diào)試好之后,ansible將利用inventory變量所指向的腳本,獲取主機(jī)和組信息(或者通過(guò)-i參數(shù)指定),來(lái)向主機(jī)執(zhí)行命令。Inventory分割如果我們想要同時(shí)使用常規(guī)Inventory文件和動(dòng)態(tài)Inventory腳本,或者按不同業(yè)務(wù)/系統(tǒng)分割成的多個(gè)Inventory文件,我們可以把所有這些文件全部都放到同一個(gè)目錄,并配置ansible.cfg文件的hostfile參數(shù),讓Ansible使用hostfile參數(shù)所指定的目錄作為Inventory即可,也可以在命令行中使用-i命令來(lái)指定特定的Inventory文件。Ansible將會(huì)處理目錄里所有的文件并將結(jié)果合并為一個(gè)完整的Inve
7、ntory。defaultshostfile = /etc/ansible/inventory2、Ansible Ad-Hoc命令使用Ansible系統(tǒng)由控制主機(jī)對(duì)被管節(jié)點(diǎn)的操作方式可分為兩類,即 Ad-Hoc和Playbook:Ad-Hoc模式使用單個(gè)模塊,支持批量執(zhí)行單條命令。Playbook模式是Ansible主要管理方式,也是Ansible功能強(qiáng)大的關(guān)鍵所在,Playbook通過(guò)多個(gè)Task集合完成一類功能,如 Web 服務(wù)的安裝部署、數(shù)據(jù)庫(kù)服務(wù)器的批量備份等,可以簡(jiǎn)單地把 Playbook理解為通過(guò)組合多條Ad-Hoc操作的配置文件。下面將通過(guò)兩個(gè)小節(jié)的內(nèi)容,來(lái)說(shuō)明如何使用Ad-Ho
8、c和Playbook。其中Ad-Hoc將重點(diǎn)介紹命令參數(shù)和幾個(gè)常用的模塊。通常我們會(huì)以命令行的形式使用Ansible模塊,或者將Ansible命令嵌入到腳本中去執(zhí)行。Ansible自帶了很多模塊,我們可以直接使用他們。當(dāng)我們不知道如何使用這些模塊時(shí),可以ansible-doc命令獲取幫助,例如:使用“ansible-doc -l”命令可以顯示所有自帶的模塊和相關(guān)簡(jiǎn)介,使用“ansible-doc 模塊名”命令可以顯示該模塊的參數(shù)及用法等內(nèi)容。Ansible Ad-Hoc命令參數(shù)我們可以使用“ansible -h”命令來(lái)列出所有的命令參數(shù),下面列舉了常用的一些參數(shù),部分參數(shù)如果不指定將采用ans
9、ible.cfg中的設(shè)置值,或者采用原始默認(rèn)值。Ansible常用模塊介紹連通性測(cè)試通常采用Ping模塊來(lái)測(cè)試遠(yuǎn)程主機(jī)的運(yùn)行狀態(tài):ansible ip -m ping執(zhí)行命令執(zhí)行命令可以采用四種方式,第一種方式是利用Command模塊在遠(yuǎn)程主機(jī)上執(zhí)行命令,但Command模塊不支持管道命令,例如,查看某個(gè)主機(jī)的日期:ansible ip -m command -a date -o值得注意的是,Ansible默認(rèn)的模塊是Command,所以上面的命令可以簡(jiǎn)化為:ansible ip -a date -o第二種方式是利用Shell模塊,切換到某個(gè)Shell執(zhí)行遠(yuǎn)程主機(jī)上的Shell/Python腳
10、本,或者執(zhí)行命令,Shell支持管道命令,功能較Command更強(qiáng)大靈活,例如:ansible ip -m shell -a bash /root/test.sh -oansible ip -m shell -a echo 123456|passwd -stdin root第三種方式是利用Raw模塊,Raw支持管道命令。Raw有很多地方和Shell類似,但是如果是使用老版本Python(低于2.4),無(wú)法通過(guò)Ansible的其他模塊執(zhí)行命令,則需要先用到Raw模塊遠(yuǎn)程安裝Python-sim-plejson后才能受管;又或者是受管端是路由設(shè)備,因?yàn)闆](méi)有安裝Python環(huán)境,那就更需要使用Raw
11、模塊去管控了。例如:ansible ip -m raw -a cd /tmp;pwd第四種方式是利用Script模塊,傳輸Ansible中控端上的Shell/Python腳本到遠(yuǎn)端主機(jī)上執(zhí)行,即使遠(yuǎn)端主機(jī)沒(méi)有安裝Python也可以執(zhí)行,有點(diǎn)類似Raw模塊。但Script只能執(zhí)行腳本,不能調(diào)用其他指令,且不支持管道命令,例如:ansible ip -m script -a /root/test.sh -oremoves參數(shù)用來(lái)判斷遠(yuǎn)端主機(jī)上是不是存在test.sh文件,如果存在,就執(zhí)行管控機(jī)上的test.sh,不存在就不執(zhí)行:ansible ip -m script -a removes=/ro
12、ot/test.sh /root/test.sh -ocreates用來(lái)判斷遠(yuǎn)端主機(jī)上是不是存在test.sh文件,如果存在,就不執(zhí)行,不存在就執(zhí)行管控機(jī)上的test.sh文件:ansible ip -m script -a creates=/root/test.sh /root/test.sh -o復(fù)制文件常用的文件操作模塊就是Copy模塊,它主要用于將本地或遠(yuǎn)程機(jī)器上的文件拷貝到遠(yuǎn)程主機(jī)上。其主要參數(shù)有以下幾個(gè):復(fù)制本地文件的到遠(yuǎn)程主機(jī):ansible ip -m copy -a src=/root/test.sh dest=/tmp/test.sh復(fù)制并修改文件的權(quán)限:ansible i
13、p -m copy -a src=/root/test.sh dest=/tmp/test.sh mode=755復(fù)制并修改文件的屬主:ansible ip -m copy -a src=/root/test.sh dest=/tmp/test.sh mode=755 owner=root復(fù)制文件前備份:ansible ip -m copy -a src=test.sh backup=yes dest=/tmp服務(wù)管理在Ansible Ad-Hoc中,Service模塊可以幫助我們管理遠(yuǎn)程主機(jī)上的服務(wù)。例如,啟動(dòng)或停止遠(yuǎn)程主機(jī)中的某個(gè)服務(wù)。但是該服務(wù)本身必須要能夠通過(guò)操作系統(tǒng)的管理服務(wù)的組件所
14、管理,例如Redhat6中默認(rèn)通過(guò)SysV進(jìn)行服務(wù)管理,Redhat7中默認(rèn)通過(guò)Systemd管理服務(wù),如果該服務(wù)本身都不能被操作系統(tǒng)的服務(wù)管理組件所管理,那么也不能被Service模塊管理。該模塊的幾個(gè)常用參數(shù)如下:?jiǎn)?dòng)服務(wù):ansible all -m service -a name=sshd state=started停止服務(wù):ansible all -m service -a name=sshd state=stopped開(kāi)啟服務(wù)自啟動(dòng):ansible all -m service -a name=sshd enable=yes安裝包管理在Ansible Ad-Hoc中,可以通過(guò)Yum
15、模塊實(shí)現(xiàn)在遠(yuǎn)程主機(jī)上通過(guò)Yum源管理軟件包,包括安裝、升級(jí)、降級(jí)、刪除和列出軟件包等。該模塊的幾個(gè)常用參數(shù)如下:安裝軟件包:ansible all -m yum -a name=nginx state=installed卸載軟件包:ansible all -m yum -a name=nginx state=removed臨時(shí)啟用local yum源安裝最新版軟件包:ansible all -m yum -a name=nginx state=latest enablerepo=local用戶管理在Ansible Ad-Hoc中,可以通過(guò)User模塊幫助我們管理遠(yuǎn)程主機(jī)上的用戶,比如創(chuàng)建用戶、
16、修改用戶、刪除用戶、為用戶創(chuàng)建密鑰對(duì)等操作。該模塊的幾個(gè)常用參數(shù)如下:增加用戶、組和密碼:ansible ip -m group -a name=testg”ansible ip -m user -a name=test group=testg password=123456 home=/home/test”刪除用戶和用戶主目錄:ansible ip -m user -a name=test state=absent remove=yes3、Ansible Playbook使用在Ansible Ad-Hoc中,可以通過(guò)Yum模塊實(shí)現(xiàn)在遠(yuǎn)程主機(jī)上通過(guò)Yum源管理軟件包,包括安裝、升級(jí)、降級(jí)、刪除
17、和列出軟件包等。該模塊的幾個(gè)常用參數(shù)如下:我們?cè)谑褂肁nsible時(shí),絕大部分時(shí)間將花費(fèi)在編寫Playbook上,Playbook是一個(gè)Ansible術(shù)語(yǔ),指的是用于配置管理的腳本。Ansible的Playbook是使用YAML語(yǔ)法編寫的。YAML是一種類似于Json的文件格式,不過(guò)YAML更適合人來(lái)讀寫。我們?cè)陂_(kāi)始編寫Playbook時(shí),需要對(duì)YAML的語(yǔ)法有一定的了解,否則將經(jīng)常碰到語(yǔ)法錯(cuò)誤。下面首先通過(guò)一個(gè)安裝和配置ntpd服務(wù)的Playbook案例來(lái)介紹:第一行僅表示該文件為YAML格式文件,非必須。第二行定義了該P(yáng)laybook所針對(duì)的主機(jī),all表示所有,也可以填寫Inventor
18、y文件中的IP地址或者主機(jī)組名稱。第三行表示下面開(kāi)始定義Task任務(wù)。第四、五行定義了一個(gè)具體Task任務(wù)(通過(guò)Yum安裝ntpd服務(wù)),包含任務(wù)名稱和執(zhí)行動(dòng)作,其中任務(wù)名稱為非必須,可以直接定義執(zhí)行動(dòng)作。第六、七、八、九行定義了另一個(gè)具體Task任務(wù)(同步ntpd配置文件模板),并更改文件的屬主、屬組和文件權(quán)限。notify和下面的handlers為配對(duì)使用,當(dāng)ntpd配置文件模板同步至遠(yuǎn)端主機(jī)后,文件的MD5值將發(fā)生變化,觸發(fā)restart ntpd service這個(gè)handler。第十、十一、十二行定義了上述handler的具體內(nèi)容,包括名稱和執(zhí)行動(dòng)作,也就是利用service模塊來(lái)重
19、啟ntpd服務(wù)。編制好了Playbook,我們需要使用-syntax-check參數(shù)來(lái)對(duì)該腳本進(jìn)行語(yǔ)法檢查:ansible-playbook ntpd.yaml -syntax-checkplaybook: ntpd.yaml語(yǔ)法檢測(cè)過(guò)后,可以用-list-task參數(shù)來(lái)查看該P(yáng)laybook中的所有Task:確認(rèn)無(wú)誤后,開(kāi)始使用命令運(yùn)行名為ntpd.yaml的Playbook:ansible-playbook ntpd.yaml后續(xù)如果我們的ntpd.conf.j2配置模板需要變更,并需要批量分發(fā)下去,我們可以指定copy ntp.conf這個(gè)Task,只運(yùn)行該Task:ansible-pl
20、aybook ntpd.yaml -start-at-task=copy ntp.conf除了上述參數(shù)之外,ansible-playbook還有幾個(gè)常用的參數(shù):-step同一時(shí)間只執(zhí)行一個(gè)Task,每個(gè)Task執(zhí)行前都會(huì)提示確認(rèn)一遍。-tags=TAGS當(dāng)Play和Task的Tag為該參數(shù)指定的值時(shí)才執(zhí)行,多個(gè)Tag以逗號(hào)分隔。-skip-tags=SKIP_TAGS當(dāng)Play和Task的Tag不匹配該參數(shù)指定的值時(shí)才執(zhí)行。根據(jù)前面的案例,我們對(duì)Playbook的大體寫法和用法有了一個(gè)大致的認(rèn)識(shí),下面重點(diǎn)介紹幾個(gè)Play-book常用的使用要點(diǎn):Playbook的組成一個(gè)Playbook包括一
21、個(gè)或多個(gè)Play。一個(gè)Play由Host的無(wú)序集合與Task的有序列表組成。每一個(gè)Task僅由一個(gè)模塊構(gòu)成。見(jiàn)下圖所示:Tasks List和ActionPlay的主體部分是Task列表,Task列表中的各任務(wù)按次序逐個(gè)在Hosts中指定的主機(jī)上執(zhí)行,即在所有主機(jī)上完成第一個(gè)任務(wù)后再開(kāi)始第二個(gè)任務(wù)。在運(yùn)行Playbook時(shí)(從上到下執(zhí)行),如果一個(gè)Host執(zhí)行Task失敗,整個(gè)Task都會(huì)回滾,我們需要修正Playbook中的錯(cuò)誤,然后重新執(zhí)行即可。Task的目的是使用指定的參數(shù)執(zhí)行模塊,而在模塊參數(shù)中可以使用變量,模塊執(zhí)行時(shí)冪等等,這意味著多次執(zhí)行是安全的,因?yàn)槠浣Y(jié)果一致。另外,按照規(guī)范寫法
22、,每一個(gè)Task必須有一個(gè)名稱Name,雖然這不是必須的,但這樣在運(yùn)行Playbook時(shí),從其輸出的任務(wù)執(zhí)行信息中可以很好的辨別出是屬于哪一個(gè)Task。如果沒(méi)有定義Name,Action的值將會(huì)用作輸出信息中標(biāo)記特定的Task,結(jié)果不好分辨。定義一個(gè)Task,常見(jiàn)的格式為“module: options”,例如:“yum: name=httpd”。值得注意的是,Ansible的自帶模塊中,Command模塊和Shell模塊無(wú)需使用key=value格式,直接編寫要執(zhí)行的命令即可。HandlersHandlers也是一些Task的列表,和一般的Task并沒(méi)有什么區(qū)別。它是由通知者進(jìn)行的Notif
23、y,如果沒(méi)有被Notify,則Handlers不會(huì)執(zhí)行,如果被Notify了,則Handlers被執(zhí)行。不管有多少個(gè)通知者進(jìn)行了Notify,等到Play中的所有Task都執(zhí)行完成之后,Handlers也只會(huì)被執(zhí)行一次。例如:變量引用我們可以在PlayBook中通過(guò)“vars: 變量名”的方式聲明變量,并通過(guò)“變量名”的方式使用已聲明的變量。另外,我們還可以直接引用Ansible的變量,包括采集到的主機(jī)Fact中的變量,例如:通過(guò)ansible_all_ipv4_address來(lái)獲取IPV4地址,或者通過(guò)ansible_distribution、ansible_distribution_ver
24、sion來(lái)獲取操作類型和版本信息。除此之外,還能引用已編輯好的Inventory文件中定義的主機(jī)變量,這樣當(dāng)安裝完一些軟件,需要根據(jù)主機(jī)中定義的變量來(lái)做一些自動(dòng)化配置時(shí),將會(huì)非常好用。例如:vi /etc/ansible/hosts #定義Inventory文件中的變量與值X.X.108.2 hostname=test上面的案例是通過(guò)vars的方式定義了package和service兩個(gè)變量,并在下面的yum和service兩個(gè)Task中進(jìn)行引用,第三個(gè)Task則是直接引用setup生成的Fact變量和來(lái)自Inventory文件中定義的主機(jī)變量hostname,來(lái)實(shí)現(xiàn)將內(nèi)容信息傳遞至遠(yuǎn)端主機(jī)的
25、文件中,輸出結(jié)果如下:cat /tmp/test.txttest:RedHat 7.2條件判斷我們可以在PlayBook中通過(guò)“when: 變量=值”的方式聲明一個(gè)條件判斷,可以看出when的值是一個(gè)條件表達(dá)式,如果條件判斷成立,Task就執(zhí)行,如果判斷不成立,則task不執(zhí)行。例如當(dāng)我們需要根據(jù)變量、Facts(setup)或此前任務(wù)的執(zhí)行結(jié)果來(lái)作為某Task執(zhí)行與否的前提時(shí),則要用到條件判斷,這時(shí)可以在Playbook中使用when子句:在Task后添加when子句。另外,when子句支持jinjia2表達(dá)式或語(yǔ)法。迭代當(dāng)我們有需要重復(fù)性執(zhí)行的任務(wù)時(shí),可以使用迭代機(jī)制。其使用格式為將需要迭
26、代的內(nèi)容定義為item變量引用,并通過(guò)with_items語(yǔ)句指明迭代的元素列表即可。例如:TemplatesJinja是基于Python的模板引擎。Template類是Jinja的另一個(gè)重要組件,可以看作一個(gè)編譯過(guò)的模塊文件,用來(lái)生產(chǎn)目標(biāo)文本,我們可以傳遞Python的變量給模板去替換模板中的標(biāo)記。例如,我們?cè)谧鯪ginx安裝與配置時(shí),有些監(jiān)聽(tīng)端口、服務(wù)名稱等配置可以通過(guò)變量的方式在Inventroy文件中為不同主機(jī)預(yù)定義好,當(dāng)我們定義好了一個(gè)模板,并將模板中的監(jiān)聽(tīng)端口和服務(wù)名稱設(shè)置為變量后,在運(yùn)行Template這個(gè)Task時(shí),將會(huì)把不同主機(jī)的這些變量信息傳遞到模板中使用,實(shí)現(xiàn)配置的自動(dòng)化
27、。例如:vi /tmp/httpd.conf.j2 #定義模板中的變量Listen http_portServerName server_nameMaxClients access_numvi /etc/ansible/hosts #定義Inventory文件中的變量與值testX.X.X.2 http_port=X.X.X.2:80 access_num=50 server_name=test:80安裝Nginx時(shí),將把Inventory文件中主機(jī)定義好的變量與值傳遞到模板中,并拷貝至該遠(yuǎn)端主機(jī):Tags在一個(gè)Playbook中,我們一般會(huì)定義很多個(gè)Task,如果我們只想執(zhí)行其中的某一個(gè)Ta
28、sk或多個(gè)Task時(shí)就可以使用Tags標(biāo)簽功能了,例如:ansible-playbook test.yml -tags=nginx4、Ansible Facts使用Facts組件是Ansible用于采集被管主機(jī)設(shè)備信息的一個(gè)功能,當(dāng)Ansible采集Fact的時(shí)候,它會(huì)收集被管主機(jī)的各種詳細(xì)信息:CPU架構(gòu)、操作系統(tǒng)、IP地址、內(nèi)存信息、磁盤信息等,這些信息保存在被稱作Fact的變量中。Ansible使用一個(gè)名為Setup的特殊模塊來(lái)實(shí)現(xiàn)Fact的收集,在Playbook中默認(rèn)會(huì)調(diào)用這個(gè)模塊進(jìn)行Fact收集,在命令行中可以通過(guò)“ansible ip -m setup”來(lái)進(jìn)行手動(dòng)收集,整個(gè)Facts信息被包裝JSON格式的數(shù)據(jù)結(jié)構(gòu)中, Ansible Facts是最上層的值。例如:Fac
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)意服務(wù)合同范本
- 合同范例制作軟件
- 商品房廚房裝修合同范例
- 商業(yè)贊助合同范本
- 小學(xué)科學(xué)教師工作總結(jié)匯報(bào)
- 理想目標(biāo)與教育主題班會(huì)
- 有答案-人教部編版一年級(jí)語(yǔ)文下冊(cè)第四單元達(dá)標(biāo)檢測(cè)卷
- 核心素養(yǎng)背景下小學(xué)語(yǔ)文實(shí)踐教學(xué)活動(dòng)策略研究
- 醫(yī)美行業(yè)的優(yōu)勢(shì)與發(fā)展
- 海南省三亞市2024-2025學(xué)年高三上學(xué)期學(xué)業(yè)水平診斷考試數(shù)學(xué)試題(解析版)
- 網(wǎng)站培訓(xùn)內(nèi)容trswcm65表單選件用戶手冊(cè)
- 監(jiān)理大綱(范本)
- 空調(diào)系統(tǒng)維保記錄表格模板
- 打印版-圓與二次函數(shù)綜合題精練(帶答案)
- 工程結(jié)算書標(biāo)準(zhǔn)
- 氧氣管道吹掃方案(共7頁(yè))
- JJG-943-2011-總懸浮顆粒物采樣器
- 2018年湖北省襄陽(yáng)市中考物理試卷
- 波程差與光程差
- 常用測(cè)井曲線符號(hào)及單位(最規(guī)范版)
- SAC系統(tǒng)工作面電控部分培訓(xùn)
評(píng)論
0/150
提交評(píng)論