æè¿ã®æè¡éçºã®ã¹ããŒãã¯é©ãã¹ããã®ã§ãã è¿å¹Žã®ç§åŠæè¡ã®é²æ©ã®é£èºã¯ã20äžçŽã®50幎代åŸåãã70幎代åã°ãŸã§ã®æéã«ãããå®å®ç£æ¥ã®çºå±ã®ããŒã¹ãšããæ¯èŒã§ããŸããã ã¡ããã©ãã®ãšããå®å®ç©ºéã§ã®äººéã®ååšãçŸå®ã«ãªã£ãããã«ãä»ãšåãããã«ã人ã ãæ©æ¢°ã§æ®éçã«çœ®ãæããããšã¯ãã¯ãè¶ è¶çãªãã®ã§ã¯ãªãããã§ãã
ããã»ã¹èªååã¯ç§ãã¡ã®æ代ã®æ¬æ Œçãªããã¬ã³ããã«ãªãã蟲æ¥ããã¹ããŒãããŒã ã人工ç¥èœãŸã§ãã»ãŒãã¹ãŠã®æŽ»ååéã§ãã®åœ±é¿ãæ¡å€§ãç¶ããŠããŸãã
ãã®åŸåã¯ãããžãã¹åéã«ãããã²ãŒã ã®ç¬èªã®ã«ãŒã«ã決å®ããŸãã ããžãã¹ããã³çç£ããã»ã¹ã®æé©åãèªååã«ããäœã³ã¹ãåãšé«éåã«ååã«æè³ããŠããªãåžå Žé¢ä¿è ã¯ãããã«åãæ®ãããŸãã
å¿ èŠã«å¿ããŠãçç£ã®èªååã¯è¡ççã§ãã ããã§ã¯ãèªåè»ã®è£œé ïŒã³ã³ãã¢ã«ããæåã¢ã»ã³ããªã®äº€æïŒãšãœãããŠã§ã¢ã®è£œé ïŒæåãã¹ãã®èªåãã¹ããžã®äº€æïŒãŸãã¯éä¿¡ãµãŒãã¹ã®æäŸïŒé»è©±ãªãã¬ãŒã¿ãŒã®æåäœæ¥ã®äº€æãæåã«äº€ææ©åšããããŠæ°ãããã®ïŒã®äž¡æ¹ã«ã€ããŠè©±ããŸããéä¿¡æè¡ïŒã
Huaweiã§ã¯ãçŸä»£ã®çŸå®ã«ãããèªååã®éèŠæ§ãç解ããHuaweiãããã¯ãŒã¯æ©åšã®æäœã®èªååã«ãããçµéšã補åã®ãŠãŒã¶ãŒãšå ±æããèªååã«æ§ããããäžé£ã®æçš¿ãããªãã®æ³šæã«åããããšãéèŠãã€æçšã§ãããšèããŠããŸãã
ãæåã®ã·ãªãŒãºãã§ã¯ãHuaweiæ©åšã«å®è£ ãããã€ãã³ã管çããŒã«ã«ã€ããŠèª¬æããŸãã
ã€ãã³ã管ç
ãããã¯ãŒã¯ãããã³ã«ã«ã¯ãç¹å®ã®ã€ãã³ãã«å¯Ÿããåå¿ã®èª¬æãå«ãŸããŠããŸãã ããšãã°ãOSPFãŸãã¯RIPããã»ã¹ã«å«ãŸããã€ã³ã¿ãŒãã§ã€ã¹ãã¯ã©ãã·ã¥ããå Žåããã®ã€ãã³ããæ€åºããã«ãŒã¿ãŒã¯ãè¿é£ã«éç¥ãéä¿¡ããŸãã ããããæšæºãããã³ã«ã§å®è£ ãããã€ãã³ãã«å¯Ÿããå€æ°ã®åå¿ã¯ãã·ã¹ãã ãä¿å®ããã¹ãã·ã£ãªã¹ããééããå¯èœæ§ã®ããããŸããŸãªã¿ã¹ã¯ããã¹ãŠäœ¿ãæããããšã¯ãããŸããã äŸãèããŠã¿ãŸãããïŒ
ãã®å Žåãã芧ã®ãšãããããŒã¿ãšé³å£°ã®äž¡æ¹ãåå€éšãã£ãã«ã§éä¿¡ãããŸããåãã£ãã«ã®åž¯åå¹ ã®50ïŒ ãé³å£°ãã©ãã£ãã¯ã«å²ãåœãŠãQoSãæ§æãããŸãã ãã ãããã£ãã«ã®1ã€ãã¯ã©ãã·ã¥ããå Žåãæ®ãã®ãã£ãã«ã®èšå®ãå€æŽããŠãé³å£°ãã©ãã£ãã¯ã®åªå 床ãã¥ãŒã50ïŒ ã§ã¯ãªã70ïŒ ãå ããããã«ããå¿ èŠããããŸãã
ãã¡ããããã®åé¡ã¯ãNMSãŸãã¯SDNã³ã³ãããŒã©ãŒïŒå€éšå¶åŸ¡ã·ã¹ãã ïŒã䜿çšããŠè§£æ±ºã§ããŸãã ããããã«ãŒã¿ãŒã®æšæºããŒã«ã§è§£æ±ºããããšãã§ããŸããããã®è§£æ±ºçã¯éåžžã«æçœã§ãã
ç¹ã«ãïŒç§ãã¡ã®ç掻ã®ããã«ïŒãã£ãšè€éãªç¶æ³ã§ã¯ïŒãã£ãã«é床ãç°ãªããç°ãªãã«ãŒã¿ãŒã§åä¿¡ãããç¶æ³ïŒ
ããããã€ãã³ã管çã·ã¹ãã ã®ãæçµæéãã®åºçªã§ããããã¯ãåœç€ŸãHuaweiãããã¯ãŒã¯OSã§å®è£ ãããã®ã§ãã
OPSïŒOpen Programming SystemïŒã€ãã³ã管çã·ã¹ãã ã䜿çšãããšãç¹å®ã®ã€ãã³ããçºçãããšãã«ç¹å®ã®ã¢ã¯ã·ã§ã³ã»ããïŒæ§æã®å€æŽããã¡ã€ã«ã®ä¿åãªã©ïŒãèªåçã«å®è¡ã§ããŸãã
詳现ã«ç§»ããŸãããã
OPSãµããŒãæ©åš
OPSã¯çŸåšãCEã·ãªãŒãºã¹ã€ãããšNE40ããã³ARã·ãªãŒãºã«ãŒã¿ãŒã§ãµããŒããããŠããŸãã ãããã®åã¢ãã«ã«ã¯ãç¬èªã®OPSãµããŒãæ©èœããããŸãã
ããã°ã©ãã³ã°
éåžžãã€ãã³ãå¿çã«ãŒã«ã¯ãCLIïŒã³ãã³ãã©ã€ã³ïŒã䜿çšããŠäœæããããPythonïŒããã°ã©ãã³ã°èšèªïŒã§äœæã§ããŸãã CLIãšPythonã®äž¡æ¹ã䜿çšããŠãã«ãŒã«èªäœãèšè¿°ããããšãã§ããŸãã åæã«ãCEã¹ã€ããã§ã¯äž¡æ¹ã®ããŒã«ã䜿çšã§ããARã«ãŒã¿ãŒã§ã¯Pythonã®ã¿ãNE40ã«ãŒã¿ãŒã§ã¯ã³ãã³ãã©ã€ã³ã®ã¿ã䜿çšã§ããŸãã
CLIã䜿çšããŠãã€ãã³ãã®èª¬æãšããã«å¯Ÿããåå¿ã®äŸãèŠãŠã¿ãŸãããã
äŸïŒ1ïŒ
[ãCE] ops
[ ãCE -ops] ã¢ã·ã¹ã¿ã³ãtest1
[* CE-ops-assistant-test1] æ¡ä»¶syslogãã¿ãŒã³ãã*ã«ãŒãããã¯[3-9]ã*ææã
[* CE-ops-assistant-test1] 1.1ã³ãã³ãsysãå®è¡ããŸã
[* CE-ops-assistant-test1] 1.2ã³ãã³ãint gi0 / 0/0ãå®è¡
[* CE-ops-assistant-test1] 1.3ã³ãã³ããå®è¡ããå ã«æ»ãã·ã£ããããŠã³
[* CE-ops-assistant-test1] 1.4ã³ãã³ãã³ããããå®è¡
[* CE-ops-assistant-test1] ã³ããã
//埩å·åïŒLoopback3ãLoopback 41ãªã©ã®ã€ã³ã¿ãŒãã§ãŒã¹ã®ãããã ããŠã³ãããšãã®ã¬ãããã€ãŒãµããã0/0/0ã€ã³ã¿ãŒãã§ã€ã¹ã管çäžã®çµäºç¶æ ã«ãªããŸãã
å¥ã®äŸã§ã¯ãCLIã䜿çšããŠã€ãã³ãã®èª¬æãæå®ããåå¿ãPythonïŒbackupconfig.pyãã¡ã€ã«å ïŒã§èª¬æããŸãã
äŸïŒ2ïŒ
[ãCE-ops] ã¢ã·ã¹ã¿ã³ãå / *ã¢ã·ã¹ã¿ã³ãã®äœæ* /
[* CE-ops-assistant-Name] æ¡ä»¶ã€ãã³ãæ©èœã®æ§æåcfg_file_change
[* SwitchA-ops-assistant-backup_config] execute 1 python backupconfig.py
[* SwitchA-ops-assistant-backup_config] commit
//埩å·åïŒæ§æãã¡ã€ã«ãå€æŽããããšãbackupconfigã¹ã¯ãªãããå®è¡ãããŸãã
ã€ãã³ãã®çš®é¡
CLIã䜿çšããŠã次ã®ã¿ã€ãã®ã€ãã³ããžã®å¿çãæ§æã§ããŸãã
- syslogãšã³ããª
- ãã©ãããããã¡ãžã®æžã蟌ã¿ã
- SNMPã®éä¿¡ãŸãã¯åä¿¡ã
- äºæ ã®çºçïŒã¢ã©ãŒã ïŒ;
- ã¿ã€ããŒå€ã
Pythonã®ãããã§ãããã«è¿œè·¡ã§ããŸãã
- ã³ãã³ãå ¥å;
- ã«ãŒãã®å€æŽã
- ã€ã³ã¿ãŒãã§ã€ã¹ç¶æ ã®å€æŽã
- NQAã®äœæ¥çµæïŒSLAïŒã
ã€ãã³ããžã®åå¿
æãäžè¬çã«äœ¿çšãããã®ã¯ãããã€ã¹ã®åæ§æã§ãã æãåçŽãªå ŽåãCLIã¯ã³ãã³ãã®ã·ãŒã±ã³ã¹ãèšå®ãïŒäŸïŒ1ã«ç€ºãããã«ïŒã2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯å®è¡ã®ã·ãŒã±ã³ã¹ã決å®ããŸãïŒè±æ°åé ïŒã
æåã®äŸã§ã¯ã次ã®ã³ãã³ããå ¥åãããŸãã
- æ§æã¢ãŒãã«å ¥ãïŒã·ã¹ãã ãã¥ãŒïŒ;
- ã®ã¬ããã0/0/0ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ãµãã¢ãŒããžã®å ¥ãå£ã
- ã€ã³ã¿ãŒãã§ã€ã¹ãäžããã
- å€æŽãä¿åããŸãã
OPSã§ã¯ãæ倧10åã®é£ç¶ããã³ãã³ããæå®ã§ããŸãã 10åãè¶ ããã³ãã³ããå®è¡ããå¿ èŠãããå Žåã¯ãbat-fileã䜿çšãã execute 1 batch-file myfile.batã³ãã³ãã䜿çšããŠå®è¡ã§ããŸãã
æããã«ãPythonã䜿çšãããšãé 次æ§æã³ãã³ãã®ç·åœ¢å®è¡ãããè€éãªæ§é ã䜿çšã§ããŸãã
ã·ã³ãã«ãªã³ãã³ãå®è¡ã«å ããŠãOPSã§ã¯æ¬¡ã®ããšãã§ããŸãã
- ä¿åãããå€æ°ãä¿åããã³åæããŸãã
- syslogãµãŒããŒã«éç¥ãéä¿¡ããŸãã
- ãŠãŒã¶ãŒã«éç¥ãããŠãŒã¶ãŒããåãåãã端æ«ããã®å ¥åãåæããŸãã
- telnetãsshãªã©ã®ãããã³ã«ã䜿çšããŠãªã¢ãŒãããã€ã¹ã«ãã°ãªã³ããããã§ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
Pythonã®ã¡ãã£ãšããéæ³:)
åçŽãªã·ã§ã«ã®äŸãèããŠã¿ãŸãããã
- ãŠãŒã¶ãŒå
¥åãèªã¿åããPythonã³ãã³ããå®è¡ããæãåçŽãªã·ã§ã«ãPythonã§äœæããŸãã ãã®äŸã§ã¯ãã¿ãŒããã«ãžã®å
¥å/åºåãã³ãã³ãã®å®è¡ãå®è¡çµæã®åæã®æ©èœãæ€èšããŸãã
import os,sys def run(c): b=c.split() if b[0]== «ls»: if b.__len__() == 1: b.append(«/»); res = os.listdir(b[1]) print print(res) else: try: exec(c) return 1 except: print(«Something wrong») return 0 def get_command(ops,VTY): a, b = ops.terminal.write(«>>>«,vty = VTY) a, b = ops.terminal.read(maxLen = 200,timeout = 60,vty=VTY) if a==None: a='q'; return a # sh def ops_condition (ops): value, err_str = ops.cli.subscribe(«cli1», «^sh$», enter=True, sync=True, sync_wait=500) return 0 # , shell def ops_execute (ops): key, value = ops.environment.get(«_cli_vty») while 2<3: command=get_command(ops,key) if command == «q»: break; if command <> '': run(command) continue print print(«exit\n») return 0
ãã®å Žåã次ã®4ã€ã®é¢æ°ã衚瀺ãããŸãã
- runïŒã³ãã³ãïŒ -ã³ãã³ãcommandãå®è¡ããŸããæ»ãå€ã¯è§£æãããŸããã
- get_commandïŒOPSãVTYïŒ -çµã¿èŸŒã¿ã®OPSãªããžã§ã¯ããšç«¯æ«çªå·ãå ¥åã«æž¡ãããå ¥åãããã³ãã³ããè¿ããŸãã
- ããã©ããã ops_conditionïŒOPSïŒ ;
- å®è¡ops_executeïŒOPSïŒ -ãã©ãããçºçããå Žåã
ops_conditionïŒOPSïŒããã³ops_executeïŒOPSïŒé¢æ°ãå¿ èŠã§ãã
runïŒã³ãã³ãïŒ
é¢æ°ã¯Pythonã³ãã³ããå®è¡ããŸãã Pythonã«ã¯ãªãlsã³ãã³ããå ¥åãããšãPythonã®os.listdirïŒãã¹ïŒã³ãã³ãã«çœ®ãæããããŸãã
ãã¹ãæå®ãããŠããªãå Žåãpath =â /âã«çœ®ãæããããŸãã ãã®æ¹æ³ã§ãç°ãªããšã€ãªã¢ã¹ãäœæã§ããŸãã å±éãããåŒã«çœ®ãæããããç¥èªã
get_commandïŒOPSãVTYïŒ
ãŠãŒã¶ãŒå ¥åãèªã¿åããè¿ããŸãã 60ç§éå ¥åããªãã£ãå Žåãçµäºå€ãqããè¿ããŸã-çµäºããŸãã
ops_conditionïŒOPSïŒ
ãã©ããã ãã®å Žåãããªã¬ãŒãèšå®ããŠshã³ãã³ããå ¥åããŸãã
ops.cli.subscribeïŒ "cli1"ã "^ sh $"ãenter = Trueãsync = Trueãsync_wait = 500ïŒ
ã Cli1 ãã¯ããã©ãããã®ååã§ããè€æ°ã®ããã©ãããã§æ§æãããè€éãªã€ãã³ããåŠçããå¿ èŠããããŸãã
^ sh $ -2æåã®ã¿ã§æ§æãããæååãèšè¿°ããæ£èŠè¡šçŸ
sh ããšãã°ã shutdownã³ãã³ããregexp ^ shã«è©²åœãã ãã©ãã£ãã¯ã·ã§ãŒãã³ã°ã¯shã«è©²åœããŸãã
ops_executeïŒOPSïŒ
ãŸãã端æ«åãããŒå€æ°ã«èªã¿èŸŒã¿ã次ã«ç¡éã«ãŒãïŒåçŽãªwhile 2 <3ã䜿çšïŒã§ãã³ãã³ãå€æ°ã«ãŠãŒã¶ãŒå ¥åãèªã¿èŸŒãã§å®è¡ïŒå®è¡ïŒã³ãã³ãïŒïŒããããcommand ==â qâã®å Žåã«å®è¡ãåæ¢ããŸãã
- å®éã«äœãèµ·ãã£ãã®ãèŠãŠã¿ãŸãããã ãŠãŒã¶ãŒå
¥åã¯å€ªåã§ç€ºãããã«ãŒã¿ãŒããã®å¿çã¯éã«ãªããŸãã
ã¹ã¯ãªãããã«ãŒã¿ãŒã®ãã©ãã·ã¥ã«ã³ããŒããŠããã³ã³ãã€ã«ããå¿ èŠããããŸãã
< AR2 > opsã€ã³ã¹ããŒã«ãã¡ã€ã«<scriptname.py>
次ã«ãã¢ã·ã¹ã¿ã³ããäœæããå¿ èŠããããŸãã
< AR2 > ã·ã¹ãã ãã¥ãŒ
ã·ã¹ãã ãã¥ãŒã«å ¥ããCtrl + Zã§ãŠãŒã¶ãŒãã¥ãŒã«æ»ããŸãã
[AR2] ops
[AR2-ops] script-assistant python <scriptname.py>
ç§ãã¡ã¯ãã§ãã¯ããŸãïŒ
< AR2 > sh
>>>
å ¥åããã³ãããåãåããŸããã Pythonã®å®è¡ã³ã³ããã¹ãã¯execïŒïŒå ã«ã®ã¿ä¿åãããããšã«æ³šæããŠãã ããã execïŒcodeãglobalãlocalïŒãšãã圢åŒã¯äœ¿çšããªãã£ããããå€æ°ã®å€ãå²ãåœãŠãŠãåãè¡ãã€ãŸãåãexecå ã«åºåããŸãã
>>> a = 2 + 3; printïŒ "\ n \ r"ïŒ; print a
5
ãã¡ããã次ã®åœ¢åŒã䜿çšã§ããŸãã
>>> ã°ããŒãã«a
>>> globalsïŒïŒ["a"] = 2 + 3
>>> å°å·
å®éã®ããã°ã©ã ã§ã¯execãã»ãšãã©äœ¿çšããªããããçµæã¯åãã§ãããå®éã«ã¯åé¡ã§ã¯ãããŸããããã®åçŽãªã·ã§ã«ã¯ãHuaweiã«ãŒã¿ãŒã§ã®Pythonã®å¯èœæ§ãç 究ããããã«ã®ã¿æžãããŠããŸãã
ãã¡ã€ã«ãæäœãã
>>> a = dirïŒosïŒ; print a ['EX_CANTCREAT'ã... 'O_APPEND'ã 'O_ASYNC'ã 'O_CREAT' ã...ã 'O_RDWR' ã...]
ã芧ã®ãšãããããã«ã¯ãã¡ã€ã«ãäœæããããã®å®æ°ãããããã¡ã€ã«ãäœæããŠã¿ãããšãã§ããŸãã
sd1ãã£ã¬ã¯ããªã䜿çšããŸãïŒãŸãã¯/ mnt / sd1ãåãã§ãã
>>> ls / mnt / sd1
['AR2220-V200R003C01SPC900.cc'ã...ã 'V600R008C10SPC300_RM.mod'ã 'AR2220-V200R007C00SPC600.cc'ã 'shelldir'ã 'python'ã...] -åºåã«sd1ããã®ãã¡ã€ã«ãå«ãŸããŠããããšãããããŸãã æ¯èŒããïŒ
< AR2 > dir
sd1ã®ãã£ã¬ã¯ããªïŒ/ Idx Attrãµã€ãºïŒãã€ãïŒæ¥æïŒLMTïŒFileName 0 -rw- 94,689,536 2014幎4æ23æ¥17:38:30 AR2220-V200R003C01SPC900.cc ... 22 -rw- 1,113,612 2015幎12æ16æ¥14:38:44 V600R008C10SPC300_RM.mod 23 -rw- 123,975,040 2016幎3æ15æ¥13:18:56 AR2220-V200R007C00SPC600.cc 24 drw--2016幎4æ1æ¥10:16:28 shelldir 25 drw--2016幎4æ6æ¥14:45:26 python
ãã¡ã€ã«ãäœæããæãç°¡åãªæ¹æ³ïŒ
>>> os.systemïŒ 'echo qqq> /mnt/sd1/s.s'ïŒ
< AR2 > dir s *
sd1ã®ãã£ã¬ã¯ããªïŒ/ Idx Attrãµã€ãºïŒãã€ãïŒæ¥æïŒLMTïŒFileName 9 -rw- 4 2016幎10æ9æ¥17:24:15 SS åèš1,961,192 KB䜿çšå¯èœïŒ1,402,760 KBç¡æïŒ< AR2 > ãã®ä»ã®SS
Qqq
å®éãããã«ãã¡ã€ã«ããããŸãã ããã§çåãçããŸãããããã©ã®ããã«èªãã®ã§ããïŒ ãã®å Žåã osã¢ãžã¥ãŒã«ãæäŸããããŒã«ã䜿çšããŸãã
>>> f = os.openïŒ '/ mnt / sd1 / s.s'ãos.O_CREAT | os.O_RDWRïŒ; print f
47
>>> str = '222'; os.writeïŒ47ãstrïŒ
>>> str = '\ n \ r111'; os.writeïŒ47ãstrïŒ
>>> os.closeïŒ47ïŒ
< AR2 > ãã®ä»ã®SS
222
111
ãšããã§ãos.systemã䜿çšããŠåæ§ã®çµæãéæã§ããŸãã
>>> os.systemïŒ 'echo 222> /mnt/sd1/d.d'ïŒ
>>> os.systemïŒ 'echo 111 >> /mnt/sd1/d.d'ïŒ
< AR2 > ãã£ãšdd
222
111
次ã«ããã¡ã€ã«ããèªã¿åããŸãã
>>> f = os.openïŒ '/ mnt / sd1 / s.s'ãos.O_RDONLYïŒ; print f
49
>>> s = os.readïŒ49.8ïŒ; print s
222
111
ã芧ã®ãšãããOPSã·ã§ã«ã§ã®ãã¡ã€ã«ã®æäœã¯éåžžã«ç°¡åã§ããã説æããæ©èœã䜿çšããŠããªãè€éãªã€ãã³ããã³ãã©ãäœæã§ããŸãã
OPSãæäŸããæ©èœã䜿çšãããšãé»åã¡ãŒã«ã¡ãã»ãŒãžã®éä¿¡ãé€ããCisco Systemsã®åæ§ã®EEMïŒEmbedded Event ManagementïŒã·ã¹ãã ãšåãåé¡ã解決ã§ããŸãã
ãããã第äžã«ãããã¯Pythonã®æåã®å®è£ ã«ããããå°æ¥ã®ããŒãžã§ã³ã§ã¯è¿œå æ©èœãæåŸ ãããŠããŸãã 次ã«ãããŒã25ã§telnetã䜿çšããŠãªãŒãã³ãªã¬ãŒçµç±ã§é»åã¡ãŒã«ãéä¿¡ã§ããŸããä»ã®ãã³ãã©ãŒããã³ã¢ã¯ã·ã§ã³ãå®è¡ããæ©èœã¯ãCisco EEMãšãŸã£ããåãã§ãã
æåã®ã·ãªãŒãºã®çµãã
Huaweiã«ãŒã¿ãŒã§ã®ã€ãã³ã管çã«CLIãšPythonã䜿çšããå¯èœæ§ã®ããã€ããå®èšŒããããšããŸããã ãããããªãã®å€æã«ã©ãã»ã©åœ¹ç«ã€ãã ã³ã¡ã³ãã質åããã£ãŒãããã¯ããåŸ ã¡ããŠãããŸãã
ç§ãã¡ã¯ãéä¿¡æ©åšã®èªååã®åéã«ããããã¹ããã©ã¯ãã£ã¹ãåŒãç¶ãå ±æããŠãããŸãã
ãããŸã§ã®éãæåã®ã·ãªãŒãºã¯ãæ ç»ãAdventures of Electronicsãã®ããŒããŒã§ããè¥ãSeryozha Syroezhkinã®èšèã§ç· ãããã£ãŠããŸãã
ã©ã®ãããªé²æ©ããããŸãããïŒèäœåŽåããªããªã£ãã
ã¯ãã粟ç¥ã¯æ©æ¢°çããã»ã¹ã眮ãæããŸãã
é³æ¥œãã¯ã¬ãžãããç¶ç¶...