Cisco ACI App Center アプリケーションのアプリケーション構造
Cisco ACI App Center アプリケーションは規定に従ったディレクトリ/ファイル構造になっている必要があります。 今回はこのディレクトリ構造を見てみます。
アプリケーション作成の流れ
App Center 向けのアプリケーションは概ね以下のような流れで作成します。
- 規定に従ったディレクトリ/ファイル構造を作成する
- メタデータを用意する
- コードを書く
- パッケージングする
パッケージングには Getting Started with ACI App Center にある App Packager Utility を使ってパッケージングします。
アプリケーションは .zip 形式で圧縮されている
App Packager Utility 1.0 でパッケージを圧縮するコードは cisco_aci_app_packager-1.0/packager/aci_app_packager.py
の 168 〜 190 行目あたりにある make_aci
に書かれています。 この部分を見ると圧縮には OS の zip
コマンドを呼び出しているのが分かります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | # sed -n '168,190p' cisco_aci_app_packager-1.0/packager/aci_app_packager.py
def make_aci(self):
try:
os.chdir(self.tmpfileLoc)
cmd = 'zip -r {0} *'.format(self.signedAppFile)
rc = commands.getstatusoutput(cmd)
if rc[0]:
raise Exception()
except Exception as e:
if len(str(e)):
logger.error(str(e))
print_and_log_error('Error: Failed to compress and create app')
os.chdir(orig_wk_dir)
return 1
'''
MBFACTOR = float(1<<20)
size_App=os.path.getsize(self.tmpfileLoc + '/' + self.appDirName)/MBFACTOR
g = float("{0:.2f}".format(size_App))
if(size_App>1000):
print ("Size of app :"+app_name+" should be less than 1000 MB,current file size is : "+str(g)+" MB")
logger.error('Size of <app.aci> should be less than 1000 MB')
return 1
'''
return 0
|
アプリケーションの種類(Stateless / Stateful)
アプリケーションには以下の 2 種類が存在します。
番号 |
種類 |
特徴 |
1 |
Stateless |
状態を持たない(持てない)。 Web フロントエンドだけで構成される |
2 |
Stateful |
状態を持てる。 バックエンドとして Docker コンテナをアプリケーションに含める必要がある |
Stateful アプリケーションの場合は Docker コンテナイメージをアプリケーション内に含める必要がある為、アプリケーションのサイズが大きくなる傾向が強いです。
アプリケーションのディレクトリ構成
上述の通り、Stateless アプリケーションとは異なり「Stateful アプリケーションは Docker コンテナイメージを含む必要がある」という違いがありますので当然、両アプリケーションの構造は微妙に異なります。 以下は公式サイトからディレクトリ/ファイル構造の図を引用します。
サンプルアプリケーションのディレクトリ構造を見てみる
stateful アプリケーションのサンプルは Getting Started with ACI App Center に A Reference Stateful App として用意されています。 このサンプルアプリケーションをダウンロードして展開してみると(当たり前ですが)ディレクトリ構造のガイドラインに準拠した構成になっていることが分かります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | # unzip Cisco-HelloAciStateful-1.0.aci
Archive: Cisco-HelloAciStateful-1.0.aci
creating: Cisco_HelloAciStateful/
inflating: Cisco_HelloAciStateful/app.json
creating: Cisco_HelloAciStateful/Image/
inflating: Cisco_HelloAciStateful/Image/aci_appcenter_docker_image.tgz
creating: Cisco_HelloAciStateful/Legal/
inflating: Cisco_HelloAciStateful/Legal/Cisco_App_Center_Customer_Agreement.docx
inflating: Cisco_HelloAciStateful/Legal/Cisco_App_Center_Export_Compliance_Questionnaire.docx
creating: Cisco_HelloAciStateful/Media/
inflating: Cisco_HelloAciStateful/Media/.DS_Store
creating: Cisco_HelloAciStateful/Media/IntroVideo/
inflating: Cisco_HelloAciStateful/Media/IntroVideo/AppCenter Video Placeholder.mp4
creating: Cisco_HelloAciStateful/Media/License/
inflating: Cisco_HelloAciStateful/Media/License/Cisco_App_Center_License.txt
creating: Cisco_HelloAciStateful/Media/Readme/
inflating: Cisco_HelloAciStateful/Media/Readme/readme.txt
creating: Cisco_HelloAciStateful/Media/Snapshots/
inflating: Cisco_HelloAciStateful/Media/Snapshots/screenshot.png
creating: Cisco_HelloAciStateful/Service/
inflating: Cisco_HelloAciStateful/Service/plugin_server.py
inflating: Cisco_HelloAciStateful/Service/start.sh
creating: Cisco_HelloAciStateful/UIAssets/
inflating: Cisco_HelloAciStateful/UIAssets/app-start.html
inflating: Cisco_HelloAciStateful/UIAssets/app.html
inflating: Cisco_HelloAciStateful/UIAssets/app.js
creating: Cisco_HelloAciStateful/UIAssets/d3/
inflating: Cisco_HelloAciStateful/UIAssets/d3/d3.js
inflating: Cisco_HelloAciStateful/UIAssets/d3/d3.min.js
inflating: Cisco_HelloAciStateful/UIAssets/d3/LICENSE
inflating: Cisco_HelloAciStateful/UIAssets/HelloAci.png
creating: Cisco_HelloAciStateful/UIAssets/jquery/
inflating: Cisco_HelloAciStateful/UIAssets/jquery/jquery.2.1.4.js
inflating: Cisco_HelloAciStateful/UIAssets/jquery/jquery.leanModal.min.js
inflating: Cisco_HelloAciStateful/UIAssets/misc.js
inflating: Cisco_HelloAciStateful/UIAssets/style.css
|
tree
でディレクトリ/ファイル構造を表示した結果は以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | # tree Cisco_HelloAciStateful/
Cisco_HelloAciStateful/
├── app.json
├── Image
│ └── aci_appcenter_docker_image.tgz
├── Legal
│ ├── Cisco_App_Center_Customer_Agreement.docx
│ └── Cisco_App_Center_Export_Compliance_Questionnaire.docx
├── Media
│ ├── IntroVideo
│ │ └── AppCenter\ Video\ Placeholder.mp4
│ ├── License
│ │ └── Cisco_App_Center_License.txt
│ ├── Readme
│ │ └── readme.txt
│ └── Snapshots
│ └── screenshot.png
├── Service
│ ├── plugin_server.py
│ └── start.sh
└── UIAssets
├── app.html
├── app.js
├── app-start.html
├── d3
│ ├── d3.js
│ ├── d3.min.js
│ └── LICENSE
├── HelloAci.png
├── jquery
│ ├── jquery.2.1.4.js
│ └── jquery.leanModal.min.js
├── misc.js
└── style.css
11 directories, 21 files
|
参考