SlideShare a Scribd company logo
OpenStack Osloを使おう
~ cliff編 ~
July Tech Festa 2016
Hideki Saito
Japan OpenStack User Group
Internet Initiative Japan Inc.
JAPAN OPENSTACK USER GROUP 1
JULY TECH FESTA 2016
自己紹介
氏名: 齊藤 秀喜 (さいとう ひでき)
勤務先: 株式会社インターネットイニシアティブ
所属: 日本OpenStackユーザ会 ボードメンバー
趣味: OpenStack / Ansible / Solaris
TwitterID: @saito_hideki
IRC: saitou
JAPAN OPENSTACK USER GROUP 2
JULY TECH FESTA 2016
00
JAPAN OPENSTACK USER GROUP 3
はじめに
JULY TECH FESTA 2016
みなさんに伝えたいこと
はじめに
今日、みなさんに伝えたいこと(2つ)
1.効率的にCLIを開発する手法の紹介
メインロジックに注力するために、OpenStackの成果を
利用しよう!
2.OSSに対する貢献
少しだけ肩の力を抜いてやってみませんか?
JAPAN OPENSTACK USER GROUP 4
JULY TECH FESTA 2016
目次
1. DevOpsとInfrastructure as Code
2. 自分のためにコードを書こう
3. まとめ
4. おまけ - ちょっとエモーショナル
JAPAN OPENSTACK USER GROUP 5
JULY TECH FESTA 2016
01
JAPAN OPENSTACK USER GROUP 6
DevOpsとInfrastructure as
Code
JULY TECH FESTA 2016
Infrastructure as Codeって何だっけ?
Infrastructure as Code
JAPAN OPENSTACK USER GROUP 7
JULY TECH FESTA 2016
[出典] https://en.wikipedia.org/wiki/DevOps<Infrastructure as Codeの真価>
Devの現場で利用されている、QAのような仕組みをOpsの
仕事にも適用できるのが最大のメリット。
• 手順書のコード化 <= 今日の主題
• コードのリビジョンの管理
• チケットシステムによる課題管理
• コードレビュー
• テスト
• デプロイシステム
• インフラの構成管理
コード化により得られる恩恵
JAPAN OPENSTACK USER GROUP 8
JULY TECH FESTA 2016
テスト&激怒 レビューデプロイ
リビジョン管理
課題管理
真の目的に集中したい
DevOpsが定着した現在、われわれインフラエンジニアも、
作業を自動化するために、手順書ではなくコードを書くの
が日常的な仕事の1つとなっています。
しかしながら、日常のオペレーションをコード化しようと
するとき、ソフトウェア開発を生業としていない我々が、
ゼロからコードを書くのは、かなりの苦行です。
JAPAN OPENSTACK USER GROUP 9
JULY TECH FESTA 2016
OpenStackのコンポーネントが利用している
ライブラリが使えないかな?
02
JAPAN OPENSTACK USER GROUP 10
自分のためにコードを
書こう
JULY TECH FESTA 2016
実際にCLIベースのツールを書いてみましょう
OPS♡CLIですよね?
• インフラエンジニアが開発するツールは、CLIベースとなる場合
が多い(当社比) => コマンドライン中心の作業手順をコード化
○
手順書からソフトウェアへ
JAPAN OPENSTACK USER GROUP 11
JULY TECH FESTA 2016
WebUI CLI
△
こんな素敵なCLIを作りたい
JAPAN OPENSTACK USER GROUP 12
JULY TECH FESTA 2016
普通に書いてみる
Slackクライアントを例に、Osloライブラリ群の利用方法を紹介し
ます。
JAPAN OPENSTACK USER GROUP 13
JULY TECH FESTA 2016
メッセージを投稿
Slack CLI
I♡CLI
Slack CLIを書く
事前準備
1.Slackにチームを作成する
➡ 例: coffee4u.slack.com
2.チームにチャネルを追加する
➡ 例: #notice
3.プログラムで利用するBot用のTOKENを取得する
4.python-slackclientをインストールする
5.クライアントコードを書く!
JAPAN OPENSTACK USER GROUP 14
JULY TECH FESTA 2016
Slack CLIを書く
01: import sys
02: from slackclient import SlackClient
03:
04: TOKEN = “自主規制”
05: CHANNEL = "#notice"
06: USER = "misuzu_aoyama"
07: ICON_URL = "https://pbs.twimg.com/profile_images/354648329/600-600_B.jpg"
08:
09: def get_client(token):
10: return SlackClient(token)
11: def check_client(client):
12: result = client.api_call("api.test")
13: return result["ok"]
14: def send_message(client, message):
15: result = client.api_call("chat.postMessage", channel=CHANNEL, username=USER, text=message, icon_url=ICON_URL)
16: return result[“ok"]
17: def main():
18: sc = get_client(TOKEN)
19: if not check_client(sc):
20: sys.stderr.write("Error: {0:s} Invalid connection.n".format(__file__))
21: for message in sys.argv[1:]:
22: print('Send message: "{0:s}" ...'.format(message))
23: result = send_message(sc, message)
24: if result:
25: print('Succeeded')
26: else:
27: print('Failed')
28: if __name__ == "__main__":
29: main()
JAPAN OPENSTACK USER GROUP 15
JULY TECH FESTA 2016
slackのチャネル(#noticeにメッセージを投稿する
Slack CLIを書く - デモ
実際に動かしてみる
JAPAN OPENSTACK USER GROUP 16
JULY TECH FESTA 2016
次のステップとして
JAPAN OPENSTACK USER GROUP 17
JULY TECH FESTA 2016
機能をライブラリ
としてまとめて…
単機能コマンド1
チャネルリスト取得
単機能コマンド2
メンバーリスト取得
単機能コマンド3
メッセージ取得
単機能コマンド4
メッセージ送信
CLI化する
– Oslo Mission Statement –
“To produce a set of python libraries containing code shared by
OpenStack projects. The APIs provided by these libraries should be
high quality, stable, consistent, documented and generally applicable.”
JAPAN OPENSTACK USER GROUP
JULY TECH FESTA 2016
もうすこしブラッシュアップ!
18
OsloのCLIフレームワーク”cliff”
を利用してみよう
Osloが提供するライブラリ群
JAPAN OPENSTACK USER GROUP 19
JULY TECH FESTA 2016
# Name
1 automaton
2 cliff (☆)
3 debtcollector
4 futurist
5 openstack-cookiecutter
6 osprofiler
7 oslo.cache
8 oslo.concurrency
9 oslo.context
10 oslo.config
11 oslo-cookiecutter
12 oslo.db
13 oslo.i18n
14 oslo.log
15 oslo.messaging
16 oslo.middleware
17 oslo.policy
18 oslo.privsep
# Name
19 oslo.reports
20 oslo.rootwrap
21 oslo.serialization
22 oslo.service
23 oslosphinx
24 oslotest
25 oslo.utils
26 oslo.versionedobjects
27 oslo.version
28 oslo.vmware
29 pylockfile
30 hacking
31 pbr (☆)
32 pyCADF
33 stevedore
34 taskflow
35 tooz
- -
OpenStackの各コンポーネント
が、独自に実装していた基本的
な機能を整理して切り出した。
https://wiki.openstack.org/wiki/Oslo
(1)
(2)
CLIに必要な機能を提供するフレームワーク(cliff)とsetuptools用
パッケージマネージャ(pbr)を利用してCLIを書いてみる。
$ git clone https://github.com/saito-hideki/slackcli.git
$ cd slackli && python setup.py build && python setup.py install
slackcli
├── sc
│   ├── __init__.py
│   ├── libsc.py
│    ├── main.py
│    ├── command.py
│    ├── list.py
│    └── show.py
├── setup.cfg
└── setup.py
CLIを書いてパッケージング
JAPAN OPENSTACK USER GROUP 20
JULY TECH FESTA 2016
<cliffがフレームワークを提供>
CLIを書く - cliffを活用
コマンドラインベースのツールに必要な機能、実は3つしかない。
「1.機能実行」・「2.一覧取得」・「3.詳細情報取得」
JAPAN OPENSTACK USER GROUP 21
JULY TECH FESTA 2016
機能を実行
なにかの一覧情報を取得
なにかの詳細情報を取得
CLIを書く - モジュールマップ
pbrはsetuptoolsを少しだけ簡単に使うためのライブラリ。
JAPAN OPENSTACK USER GROUP 22
JULY TECH FESTA 2016
import setuptools
setuptools.setup(
setup_requires=['pbr>=1.8'], pbr=True)
[metadata]
name = sc
summary = Command-Line for Slack
author = Hideki Saito
author-email = saito@fgrep.org
[files]
packages =
sc
[entry_points]
console_scripts =
sc = sc.main:main
sc.cli =
channel_list = sc.list:ChannelList
channel_history = sc.list:ChannelHistory
member_list = sc.list:MemberList
member_show = sc.show:MemberShow
message_send = sc.command:MessagePost
<setup.py> <setup.cfg>
作成するパッケージ名:”sc”
scコマンドのmain()メソッド
サブコマンドとクラスのマップ: ”sc.cli”
定義
$ sc help
<…>
Commands:
channel history Show a list of channel histroy.
channel list Show a list of channels in the slack team.
complete print bash completion command
help print detailed help for another command
member list Show a list of members in the slack team.
member show Show detail information of user
message send Sending message to the specified channel.
CLIを書く - cliffの恩恵
JAPAN OPENSTACK USER GROUP 23
JULY TECH FESTA 2016
今回、scコマンドに実装した機能は以下の通り。
1. チャネルの一覧取得 => "channel list"
2. チームメンバーの一覧取得 => "member list"
3. チームメンバーの情報取得 => "member show"
4. チャネルのメッセージ取得 => "channel history"
5. チャネルへのメッセージ送信 => "message send"
<cliffの恩恵>
help、history、出力フォーマットの指定などの
CLIに必要な共通機能は、利用者が独自実装しなくても
cliffが提供してくれる!!
Slack CLI - デモ
scコマンドを動かしてみます
JAPAN OPENSTACK USER GROUP 24
JULY TECH FESTA 2016
CLIを書く - サンプルコード
import sys, pbr.version
from cliff.app import App
from cliff.commandmanager import CommandManager
version_info = pbr.version.VersionInfo('sc')
class SlackClientCommand(App):
def __init__(self):
super(SlackClientCommand, self).__init__(
description='Slack Command-line Client', version=version_info,
command_manager=CommandManager('sc.cli'), deferred_help=True)
def main(argv=sys.argv[1:]):
return SlackClientCommand().run(argv)
JAPAN OPENSTACK USER GROUP 25
JULY TECH FESTA 2016
<main.py>
"sc"コマンド実行時に呼び出されるcliffのapp.Appを継承したクラスを定義
CommandManagerにsetup.cfgで定義済の"sc.cli"を指定
cliffのapp.Appで定義されているrun()を実行
CLIを書く - サンプルコード
import datetime, os, sc.libsc
from cliff.lister import Lister
def _append_global_args(parser):
parser.add_argument('--token', default=os.environ.get('SC_TOKEN'),
help='Defaults to env[SC_TOKEN] or None.')
return parser
class ChannelList(Lister):
"Show a list of channels in the slack team."
def get_parser(self, prog_name):
parser = super(ChannelList, self).get_parser(prog_name)
parser = _append_global_args(parser)
return parser
def take_action(self, parsed_args):
client = sc.libsc.Client(parsed_args.token)
channels = client.list_channels()
return (('Name', 'Id'),
((name, channels[name]) for name in channels)
)
<…>
JAPAN OPENSTACK USER GROUP 26
JULY TECH FESTA 2016
<list.py>
"token"オプションをコマンドラインに追加する
ために get_parser() をオーバーライド
サブコマンドが指定された際に実行されるメソッド
"channel list"サブコマンド実行時に呼び出されるクラスを定義
一覧を取得する機能なので cliff.lister.Lister を継承する。
戻り値として、((キーのタプル), (キーに対応する値のタプル)) を返す。
CLIを書く - サンプルコード
import os, sc.libsc
from cliff.show import ShowOne
def _append_global_args(parser):
parser.add_argument('--token', default=os.environ.get('SC_TOKEN'),
help='Defaults to env[SC_TOKEN] or None.')
return parser
class MemberShow(ShowOne):
"Show detail information of user"
def get_parser(self, prog_name):
parser = super(MemberShow, self).get_parser(prog_name)
parser.add_argument('name', nargs='?', default='.')
parser = _append_global_args(parser)
return parser
def take_action(self, parsed_args):
client = sc.libsc.Client(parsed_args.token)
result = client.show_member(parsed_args.name)
columns = ('Id', 'Name', 'Email', 'Skype', 'Phone', 'RealName', 'TimeZone', 'Bot')
data = (result['id'], result['name'], result['email'], result['skype'],
result['phone'], result['real_name'], result['tz'], result['is_bot'])
return (columns, data)
JAPAN OPENSTACK USER GROUP 27
JULY TECH FESTA 2016
<show.py>
"member show"サブコマンド実行時に呼び出されるクラスを定義
詳細情報を取得する機能なので cliff.show.ShowOne を継承する。
戻り値の形式は、一覧を取得する場合と同様
sc member list <name> のように
オプションなしの引数を取得する
CLIを書く - サンプルコード
import os, sc.libsc
from cliff.command import Command
class MessagePost(Command):
"Sending message to the specified channel."
def get_parser(self, prog_name):
parser = super(MessagePost, self).get_parser(prog_name)
parser.add_argument('--token', default=os.environ.get('SC_TOKEN'),
help='Defaults to env[SC_TOKEN] or None.')
parser.add_argument('--channel', default='general', help='Defaults to "general"')
parser.add_argument('--user', default='None', help='Defaults to None')
parser.add_argument('--icon_url', default=os.environ.get('SC_ICON_URL'),
help='Defaults to env[SC_ICON_URL] or None.')
parser.add_argument('message', nargs='?', default='')
return parser
def take_action(self, parsed_args):
client = sc.libsc.Client(parsed_args.token)
result = client.send_message(username=parsed_args.user, channel=parsed_args.channel,
message=parsed_args.message, icon_url=parsed_args.icon_url)
print('Send message: "{0:s}" to "{1} channel"'.format(parsed_args.message, parsed_args.channel))
if result:
print('Succeeded')
else:
print('Failed')
JAPAN OPENSTACK USER GROUP 28
JULY TECH FESTA 2016
<command.py>
"message send"サブコマンド実行時に呼び出されるクラスを定義
命令を実行する機能は cliff.command.Command を継承する。
実装の過程 - デモ
実際に実装の過程を
みていきましょう
JAPAN OPENSTACK USER GROUP 29
JULY TECH FESTA 2016
03
JAPAN OPENSTACK USER GROUP 30
まとめ
JULY TECH FESTA 2016
本セッションのまとめ
まとめ
本セッションでは、OpenStackのように巨大なOSSプロダクトの
成果を、インハウスな開発にも応用できる例を紹介しました。
• cliffはCLI開発用のフレームワークです
• CLIで提供したい本来の機能の開発に集中できます
• pbrは独自Pythonコードのパッケージ化を支援してくれます
• cliffとpbrはOsloプロジェクトがメンテナンスしています
• OpenStack OsloはIaaS管理基盤向けのライブラリ群です
• Osloは、さまざまな機能をライブラリとして提供しています
JAPAN OPENSTACK USER GROUP 31
JULY TECH FESTA 2016
04
JAPAN OPENSTACK USER GROUP 32
ちょっとエモーショナル
JULY TECH FESTA 2016
今年は何かいいことしませんか?
社会貢献ってやつですよ:-)
ちょっとエモーショナル
JAPAN OPENSTACK USER GROUP 33
JULY TECH FESTA 2016
我々が得ている
OSSからの恩恵
恩返しをしませんか?
一方的に利用するだけではなく、OSSに貢献してみませんか?
July Tech Festaに参加している皆さんなら、すぐにでもできるこ
とが何かあります!
• OSSのユーザグループに参加してノウハウをシェア(自慢もできて満足)
• 勉強会を企画・運営する
• カンファレンスのボランティアとして協力する
• OSSプロダクトのドキュメント翻訳プロジェクトに参加する
• バグレポートを出す
• コードを書く
• コードをレビューする
• あなたが大富豪なら開発資金を寄付する
JAPAN OPENSTACK USER GROUP 34
JULY TECH FESTA 2016
You can do it if you try:)
Thank you!
JAPAN OPENSTACK USER GROUP 35
JULY TECH FESTA 2016
参考にした情報
• OpenStack
- https://wiki.openstack.org/wiki/Main_Page
• Oslo - OpenStack
- https://wiki.openstack.org/wiki/Oslo
• Contribute to OpenStack
- https://wiki.openstack.org/wiki/How_To_Contribute
• python-slackclient
- http://python-slackclient.readthedocs.io/en/latest/index.html
• Slack - Creating and regenerating API tokens
- https://api.slack.com/bot-users
JAPAN OPENSTACK USER GROUP 36
JULY TECH FESTA 2016

More Related Content

PDF
OpenStack勉強会
Yuki Obara
 
PPTX
Ceph アーキテクチャ概説
Emma Haruka Iwao
 
PDF
分散ストレージソフトウェアCeph・アーキテクチャー概要
Etsuji Nakai
 
PDF
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
NTT DATA Technology & Innovation
 
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PDF
Linux女子部 systemd徹底入門
Etsuji Nakai
 
PDF
Keystone fernet token
Yuki Nishiwaki
 
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
OpenStack勉強会
Yuki Obara
 
Ceph アーキテクチャ概説
Emma Haruka Iwao
 
分散ストレージソフトウェアCeph・アーキテクチャー概要
Etsuji Nakai
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
Linux女子部 systemd徹底入門
Etsuji Nakai
 
Keystone fernet token
Yuki Nishiwaki
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 

What's hot (20)

PDF
OpenStackトラブルシューティング入門
VirtualTech Japan Inc.
 
PPTX
OpenStackで始めるクラウド環境構築入門
VirtualTech Japan Inc.
 
PDF
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
VirtualTech Japan Inc.
 
PPTX
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
NTT DATA Technology & Innovation
 
PDF
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
オラクルエンジニア通信
 
PDF
ML2/OVN アーキテクチャ概観
Yamato Tanaka
 
PDF
TripleOの光と闇
Manabu Ori
 
PDF
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
NTT DATA Technology & Innovation
 
PPTX
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
PDF
DPDK QoS
Masaru Oki
 
PDF
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
 
PDF
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
Etsuji Nakai
 
PDF
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
 
PDF
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
VirtualTech Japan Inc.
 
PDF
Openstack+Ceph設定ガイド
OSSラボ株式会社
 
PDF
OpenStack入門 2016/06/27
株式会社 NTTテクノクロス
 
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
PPTX
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
NTT DATA Technology & Innovation
 
PDF
TripleO Deep Dive 1.1
Takashi Kajinami
 
OpenStackトラブルシューティング入門
VirtualTech Japan Inc.
 
OpenStackで始めるクラウド環境構築入門
VirtualTech Japan Inc.
 
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
VirtualTech Japan Inc.
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
NTT DATA Technology & Innovation
 
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
オラクルエンジニア通信
 
ML2/OVN アーキテクチャ概観
Yamato Tanaka
 
TripleOの光と闇
Manabu Ori
 
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
NTT DATA Technology & Innovation
 
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
DPDK QoS
Masaru Oki
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No1
Etsuji Nakai
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
VirtualTech Japan Inc.
 
Openstack+Ceph設定ガイド
OSSラボ株式会社
 
OpenStack入門 2016/06/27
株式会社 NTTテクノクロス
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
NTT DATA Technology & Innovation
 
TripleO Deep Dive 1.1
Takashi Kajinami
 
Ad

Viewers also liked (11)

PDF
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
VirtualTech Japan Inc.
 
PDF
OpenStack 最新動向 2016/11
Akira Yoshiyama
 
PDF
密かに話題のBufferbloat
Kazuhito Ohkawa
 
PDF
Nutanixってナニ?
Kazuhito Ohkawa
 
PPTX
Nutanixを導入してみて思ったこと(仮)
Kazuhito Ohkawa
 
PDF
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Ryosuke Suto
 
PDF
Yahoo! JAPANが実践するOpenStackと大規模環境でのコンテナ利用 #devsumi
Yahoo!デベロッパーネットワーク
 
PDF
実用段階に入ったOpenStack ~ もうすぐ絶滅するというPrivate Cloudの多様性について ~
Rakuten Group, Inc.
 
PDF
OpenStack on OpenStack
OpenStack Foundation
 
PDF
mTCP使ってみた
Hajime Tazaki
 
PDF
Fluentd vs. Logstash for OpenStack Log Management
NTT Communications Technology Development
 
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
VirtualTech Japan Inc.
 
OpenStack 最新動向 2016/11
Akira Yoshiyama
 
密かに話題のBufferbloat
Kazuhito Ohkawa
 
Nutanixってナニ?
Kazuhito Ohkawa
 
Nutanixを導入してみて思ったこと(仮)
Kazuhito Ohkawa
 
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Ryosuke Suto
 
Yahoo! JAPANが実践するOpenStackと大規模環境でのコンテナ利用 #devsumi
Yahoo!デベロッパーネットワーク
 
実用段階に入ったOpenStack ~ もうすぐ絶滅するというPrivate Cloudの多様性について ~
Rakuten Group, Inc.
 
OpenStack on OpenStack
OpenStack Foundation
 
mTCP使ってみた
Hajime Tazaki
 
Fluentd vs. Logstash for OpenStack Log Management
NTT Communications Technology Development
 
Ad

Similar to OpenStack Osloを使おう - cliff編 (20)

PDF
OpenStackをさらに”使う”技術 概要と基礎操作
irix_jp
 
PDF
OpenStack Now!
Hideki Saito
 
PDF
Interop2014 - OpenStackの概要と最新技術動向(Icehouse)
irix_jp
 
PDF
Ansible2とOpenStackの関係
Hideki Saito
 
PDF
OSC2013 Tokyo Spring OpenStack Overview
irix_jp
 
PDF
JTF2014:OpenStackの概要と最新技術動向
irix_jp
 
PDF
OSC2013 Tokyo/Spring JOSUG
Hideki Saito
 
PDF
OpenStackSDK with Ansible
Hideki Saito
 
PDF
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
gree_tech
 
PPTX
パブリッククラウドConoHaを使ってOpenStack APIを理解する
Hironobu Saitoh
 
PDF
OpenStack on Softlayer
Yoshimi Tominaga
 
PDF
JJUG CCC 2014 ATL
Recruit Technologies
 
PPTX
OpenStack Summit Austin 2016 参加報告 - OpenStack最新情報セミナー 2016年5月
VirtualTech Japan Inc.
 
PDF
OSC2016 Tokyo/Spring セミナー資料
slankdev
 
PDF
CloudStack Ecosystem Day - OpenStack/Swift
irix_jp
 
PDF
Open stack nova_austin報告書
Yasuhiro Arai
 
PDF
Invitation to the Open Cloud Campus #osckansai 2011
Masahito Zembutsu
 
PDF
OpenStack Summit Vancouver YVR Ops
NTT Communications Technology Development
 
PDF
OpenCloudCampus : Cloud Technologies Meeting (OpenStack)
Masanori Itoh
 
PDF
Japan OSS promotion Forum symposium - Neaoss wg2 activity
Hiroshi Miura
 
OpenStackをさらに”使う”技術 概要と基礎操作
irix_jp
 
OpenStack Now!
Hideki Saito
 
Interop2014 - OpenStackの概要と最新技術動向(Icehouse)
irix_jp
 
Ansible2とOpenStackの関係
Hideki Saito
 
OSC2013 Tokyo Spring OpenStack Overview
irix_jp
 
JTF2014:OpenStackの概要と最新技術動向
irix_jp
 
OSC2013 Tokyo/Spring JOSUG
Hideki Saito
 
OpenStackSDK with Ansible
Hideki Saito
 
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
gree_tech
 
パブリッククラウドConoHaを使ってOpenStack APIを理解する
Hironobu Saitoh
 
OpenStack on Softlayer
Yoshimi Tominaga
 
JJUG CCC 2014 ATL
Recruit Technologies
 
OpenStack Summit Austin 2016 参加報告 - OpenStack最新情報セミナー 2016年5月
VirtualTech Japan Inc.
 
OSC2016 Tokyo/Spring セミナー資料
slankdev
 
CloudStack Ecosystem Day - OpenStack/Swift
irix_jp
 
Open stack nova_austin報告書
Yasuhiro Arai
 
Invitation to the Open Cloud Campus #osckansai 2011
Masahito Zembutsu
 
OpenStack Summit Vancouver YVR Ops
NTT Communications Technology Development
 
OpenCloudCampus : Cloud Technologies Meeting (OpenStack)
Masanori Itoh
 
Japan OSS promotion Forum symposium - Neaoss wg2 activity
Hiroshi Miura
 

More from Hideki Saito (20)

PDF
これからはじめるAnsible - Ansible Night Tokyo 2024
Hideki Saito
 
PDF
Ansible automationplatform product updates 2021
Hideki Saito
 
PDF
Ansible troubleshooting 101_2021
Hideki Saito
 
PDF
Ansible Fest 2020 技術トピックまとめ
Hideki Saito
 
PDF
Getting Started - Ansible Galaxy NG
Hideki Saito
 
PDF
Ansible troubleshooting 101_202007
Hideki Saito
 
PDF
How to contribute code to ansible awx
Hideki Saito
 
PDF
Update: Ansible Tower 3.6.0
Hideki Saito
 
PDF
How to contribute AWX
Hideki Saito
 
PDF
Ansible Tower on OpenShift
Hideki Saito
 
PDF
IT Automation with OpenStack and Ansible/AWX
Hideki Saito
 
PDF
IT Automation with OpenStack and Ansible/AWX
Hideki Saito
 
PDF
Ansible with AWX
Hideki Saito
 
PDF
Ansible101
Hideki Saito
 
PDF
Ansible handson ood2016
Hideki Saito
 
PDF
Ansible handson
Hideki Saito
 
PDF
OpenStack & Ansible で実現する自動化
Hideki Saito
 
PDF
Okinawa Open Days 2015 Handson - Ansible
Hideki Saito
 
PDF
OpenStack with SR-IOV
Hideki Saito
 
PDF
Ansible meetuptokyo 2015 Dynamic Inventory
Hideki Saito
 
これからはじめるAnsible - Ansible Night Tokyo 2024
Hideki Saito
 
Ansible automationplatform product updates 2021
Hideki Saito
 
Ansible troubleshooting 101_2021
Hideki Saito
 
Ansible Fest 2020 技術トピックまとめ
Hideki Saito
 
Getting Started - Ansible Galaxy NG
Hideki Saito
 
Ansible troubleshooting 101_202007
Hideki Saito
 
How to contribute code to ansible awx
Hideki Saito
 
Update: Ansible Tower 3.6.0
Hideki Saito
 
How to contribute AWX
Hideki Saito
 
Ansible Tower on OpenShift
Hideki Saito
 
IT Automation with OpenStack and Ansible/AWX
Hideki Saito
 
IT Automation with OpenStack and Ansible/AWX
Hideki Saito
 
Ansible with AWX
Hideki Saito
 
Ansible101
Hideki Saito
 
Ansible handson ood2016
Hideki Saito
 
Ansible handson
Hideki Saito
 
OpenStack & Ansible で実現する自動化
Hideki Saito
 
Okinawa Open Days 2015 Handson - Ansible
Hideki Saito
 
OpenStack with SR-IOV
Hideki Saito
 
Ansible meetuptokyo 2015 Dynamic Inventory
Hideki Saito
 

Recently uploaded (10)

PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 

OpenStack Osloを使おう - cliff編

  • 1. OpenStack Osloを使おう ~ cliff編 ~ July Tech Festa 2016 Hideki Saito Japan OpenStack User Group Internet Initiative Japan Inc. JAPAN OPENSTACK USER GROUP 1 JULY TECH FESTA 2016
  • 2. 自己紹介 氏名: 齊藤 秀喜 (さいとう ひでき) 勤務先: 株式会社インターネットイニシアティブ 所属: 日本OpenStackユーザ会 ボードメンバー 趣味: OpenStack / Ansible / Solaris TwitterID: @saito_hideki IRC: saitou JAPAN OPENSTACK USER GROUP 2 JULY TECH FESTA 2016
  • 3. 00 JAPAN OPENSTACK USER GROUP 3 はじめに JULY TECH FESTA 2016 みなさんに伝えたいこと
  • 5. 目次 1. DevOpsとInfrastructure as Code 2. 自分のためにコードを書こう 3. まとめ 4. おまけ - ちょっとエモーショナル JAPAN OPENSTACK USER GROUP 5 JULY TECH FESTA 2016
  • 6. 01 JAPAN OPENSTACK USER GROUP 6 DevOpsとInfrastructure as Code JULY TECH FESTA 2016 Infrastructure as Codeって何だっけ?
  • 7. Infrastructure as Code JAPAN OPENSTACK USER GROUP 7 JULY TECH FESTA 2016 [出典] https://en.wikipedia.org/wiki/DevOps<Infrastructure as Codeの真価> Devの現場で利用されている、QAのような仕組みをOpsの 仕事にも適用できるのが最大のメリット。 • 手順書のコード化 <= 今日の主題 • コードのリビジョンの管理 • チケットシステムによる課題管理 • コードレビュー • テスト • デプロイシステム • インフラの構成管理
  • 8. コード化により得られる恩恵 JAPAN OPENSTACK USER GROUP 8 JULY TECH FESTA 2016 テスト&激怒 レビューデプロイ リビジョン管理 課題管理
  • 10. 02 JAPAN OPENSTACK USER GROUP 10 自分のためにコードを 書こう JULY TECH FESTA 2016 実際にCLIベースのツールを書いてみましょう
  • 11. OPS♡CLIですよね? • インフラエンジニアが開発するツールは、CLIベースとなる場合 が多い(当社比) => コマンドライン中心の作業手順をコード化 ○ 手順書からソフトウェアへ JAPAN OPENSTACK USER GROUP 11 JULY TECH FESTA 2016 WebUI CLI △
  • 14. Slack CLIを書く 事前準備 1.Slackにチームを作成する ➡ 例: coffee4u.slack.com 2.チームにチャネルを追加する ➡ 例: #notice 3.プログラムで利用するBot用のTOKENを取得する 4.python-slackclientをインストールする 5.クライアントコードを書く! JAPAN OPENSTACK USER GROUP 14 JULY TECH FESTA 2016
  • 15. Slack CLIを書く 01: import sys 02: from slackclient import SlackClient 03: 04: TOKEN = “自主規制” 05: CHANNEL = "#notice" 06: USER = "misuzu_aoyama" 07: ICON_URL = "https://pbs.twimg.com/profile_images/354648329/600-600_B.jpg" 08: 09: def get_client(token): 10: return SlackClient(token) 11: def check_client(client): 12: result = client.api_call("api.test") 13: return result["ok"] 14: def send_message(client, message): 15: result = client.api_call("chat.postMessage", channel=CHANNEL, username=USER, text=message, icon_url=ICON_URL) 16: return result[“ok"] 17: def main(): 18: sc = get_client(TOKEN) 19: if not check_client(sc): 20: sys.stderr.write("Error: {0:s} Invalid connection.n".format(__file__)) 21: for message in sys.argv[1:]: 22: print('Send message: "{0:s}" ...'.format(message)) 23: result = send_message(sc, message) 24: if result: 25: print('Succeeded') 26: else: 27: print('Failed') 28: if __name__ == "__main__": 29: main() JAPAN OPENSTACK USER GROUP 15 JULY TECH FESTA 2016 slackのチャネル(#noticeにメッセージを投稿する
  • 16. Slack CLIを書く - デモ 実際に動かしてみる JAPAN OPENSTACK USER GROUP 16 JULY TECH FESTA 2016
  • 17. 次のステップとして JAPAN OPENSTACK USER GROUP 17 JULY TECH FESTA 2016 機能をライブラリ としてまとめて… 単機能コマンド1 チャネルリスト取得 単機能コマンド2 メンバーリスト取得 単機能コマンド3 メッセージ取得 単機能コマンド4 メッセージ送信 CLI化する
  • 18. – Oslo Mission Statement – “To produce a set of python libraries containing code shared by OpenStack projects. The APIs provided by these libraries should be high quality, stable, consistent, documented and generally applicable.” JAPAN OPENSTACK USER GROUP JULY TECH FESTA 2016 もうすこしブラッシュアップ! 18 OsloのCLIフレームワーク”cliff” を利用してみよう
  • 19. Osloが提供するライブラリ群 JAPAN OPENSTACK USER GROUP 19 JULY TECH FESTA 2016 # Name 1 automaton 2 cliff (☆) 3 debtcollector 4 futurist 5 openstack-cookiecutter 6 osprofiler 7 oslo.cache 8 oslo.concurrency 9 oslo.context 10 oslo.config 11 oslo-cookiecutter 12 oslo.db 13 oslo.i18n 14 oslo.log 15 oslo.messaging 16 oslo.middleware 17 oslo.policy 18 oslo.privsep # Name 19 oslo.reports 20 oslo.rootwrap 21 oslo.serialization 22 oslo.service 23 oslosphinx 24 oslotest 25 oslo.utils 26 oslo.versionedobjects 27 oslo.version 28 oslo.vmware 29 pylockfile 30 hacking 31 pbr (☆) 32 pyCADF 33 stevedore 34 taskflow 35 tooz - - OpenStackの各コンポーネント が、独自に実装していた基本的 な機能を整理して切り出した。 https://wiki.openstack.org/wiki/Oslo
  • 20. (1) (2) CLIに必要な機能を提供するフレームワーク(cliff)とsetuptools用 パッケージマネージャ(pbr)を利用してCLIを書いてみる。 $ git clone https://github.com/saito-hideki/slackcli.git $ cd slackli && python setup.py build && python setup.py install slackcli ├── sc │   ├── __init__.py │   ├── libsc.py │    ├── main.py │    ├── command.py │    ├── list.py │    └── show.py ├── setup.cfg └── setup.py CLIを書いてパッケージング JAPAN OPENSTACK USER GROUP 20 JULY TECH FESTA 2016
  • 22. CLIを書く - モジュールマップ pbrはsetuptoolsを少しだけ簡単に使うためのライブラリ。 JAPAN OPENSTACK USER GROUP 22 JULY TECH FESTA 2016 import setuptools setuptools.setup( setup_requires=['pbr>=1.8'], pbr=True) [metadata] name = sc summary = Command-Line for Slack author = Hideki Saito author-email = [email protected] [files] packages = sc [entry_points] console_scripts = sc = sc.main:main sc.cli = channel_list = sc.list:ChannelList channel_history = sc.list:ChannelHistory member_list = sc.list:MemberList member_show = sc.show:MemberShow message_send = sc.command:MessagePost <setup.py> <setup.cfg> 作成するパッケージ名:”sc” scコマンドのmain()メソッド サブコマンドとクラスのマップ: ”sc.cli” 定義 $ sc help <…> Commands: channel history Show a list of channel histroy. channel list Show a list of channels in the slack team. complete print bash completion command help print detailed help for another command member list Show a list of members in the slack team. member show Show detail information of user message send Sending message to the specified channel.
  • 23. CLIを書く - cliffの恩恵 JAPAN OPENSTACK USER GROUP 23 JULY TECH FESTA 2016 今回、scコマンドに実装した機能は以下の通り。 1. チャネルの一覧取得 => "channel list" 2. チームメンバーの一覧取得 => "member list" 3. チームメンバーの情報取得 => "member show" 4. チャネルのメッセージ取得 => "channel history" 5. チャネルへのメッセージ送信 => "message send" <cliffの恩恵> help、history、出力フォーマットの指定などの CLIに必要な共通機能は、利用者が独自実装しなくても cliffが提供してくれる!!
  • 24. Slack CLI - デモ scコマンドを動かしてみます JAPAN OPENSTACK USER GROUP 24 JULY TECH FESTA 2016
  • 25. CLIを書く - サンプルコード import sys, pbr.version from cliff.app import App from cliff.commandmanager import CommandManager version_info = pbr.version.VersionInfo('sc') class SlackClientCommand(App): def __init__(self): super(SlackClientCommand, self).__init__( description='Slack Command-line Client', version=version_info, command_manager=CommandManager('sc.cli'), deferred_help=True) def main(argv=sys.argv[1:]): return SlackClientCommand().run(argv) JAPAN OPENSTACK USER GROUP 25 JULY TECH FESTA 2016 <main.py> "sc"コマンド実行時に呼び出されるcliffのapp.Appを継承したクラスを定義 CommandManagerにsetup.cfgで定義済の"sc.cli"を指定 cliffのapp.Appで定義されているrun()を実行
  • 26. CLIを書く - サンプルコード import datetime, os, sc.libsc from cliff.lister import Lister def _append_global_args(parser): parser.add_argument('--token', default=os.environ.get('SC_TOKEN'), help='Defaults to env[SC_TOKEN] or None.') return parser class ChannelList(Lister): "Show a list of channels in the slack team." def get_parser(self, prog_name): parser = super(ChannelList, self).get_parser(prog_name) parser = _append_global_args(parser) return parser def take_action(self, parsed_args): client = sc.libsc.Client(parsed_args.token) channels = client.list_channels() return (('Name', 'Id'), ((name, channels[name]) for name in channels) ) <…> JAPAN OPENSTACK USER GROUP 26 JULY TECH FESTA 2016 <list.py> "token"オプションをコマンドラインに追加する ために get_parser() をオーバーライド サブコマンドが指定された際に実行されるメソッド "channel list"サブコマンド実行時に呼び出されるクラスを定義 一覧を取得する機能なので cliff.lister.Lister を継承する。 戻り値として、((キーのタプル), (キーに対応する値のタプル)) を返す。
  • 27. CLIを書く - サンプルコード import os, sc.libsc from cliff.show import ShowOne def _append_global_args(parser): parser.add_argument('--token', default=os.environ.get('SC_TOKEN'), help='Defaults to env[SC_TOKEN] or None.') return parser class MemberShow(ShowOne): "Show detail information of user" def get_parser(self, prog_name): parser = super(MemberShow, self).get_parser(prog_name) parser.add_argument('name', nargs='?', default='.') parser = _append_global_args(parser) return parser def take_action(self, parsed_args): client = sc.libsc.Client(parsed_args.token) result = client.show_member(parsed_args.name) columns = ('Id', 'Name', 'Email', 'Skype', 'Phone', 'RealName', 'TimeZone', 'Bot') data = (result['id'], result['name'], result['email'], result['skype'], result['phone'], result['real_name'], result['tz'], result['is_bot']) return (columns, data) JAPAN OPENSTACK USER GROUP 27 JULY TECH FESTA 2016 <show.py> "member show"サブコマンド実行時に呼び出されるクラスを定義 詳細情報を取得する機能なので cliff.show.ShowOne を継承する。 戻り値の形式は、一覧を取得する場合と同様 sc member list <name> のように オプションなしの引数を取得する
  • 28. CLIを書く - サンプルコード import os, sc.libsc from cliff.command import Command class MessagePost(Command): "Sending message to the specified channel." def get_parser(self, prog_name): parser = super(MessagePost, self).get_parser(prog_name) parser.add_argument('--token', default=os.environ.get('SC_TOKEN'), help='Defaults to env[SC_TOKEN] or None.') parser.add_argument('--channel', default='general', help='Defaults to "general"') parser.add_argument('--user', default='None', help='Defaults to None') parser.add_argument('--icon_url', default=os.environ.get('SC_ICON_URL'), help='Defaults to env[SC_ICON_URL] or None.') parser.add_argument('message', nargs='?', default='') return parser def take_action(self, parsed_args): client = sc.libsc.Client(parsed_args.token) result = client.send_message(username=parsed_args.user, channel=parsed_args.channel, message=parsed_args.message, icon_url=parsed_args.icon_url) print('Send message: "{0:s}" to "{1} channel"'.format(parsed_args.message, parsed_args.channel)) if result: print('Succeeded') else: print('Failed') JAPAN OPENSTACK USER GROUP 28 JULY TECH FESTA 2016 <command.py> "message send"サブコマンド実行時に呼び出されるクラスを定義 命令を実行する機能は cliff.command.Command を継承する。
  • 30. 03 JAPAN OPENSTACK USER GROUP 30 まとめ JULY TECH FESTA 2016 本セッションのまとめ
  • 31. まとめ 本セッションでは、OpenStackのように巨大なOSSプロダクトの 成果を、インハウスな開発にも応用できる例を紹介しました。 • cliffはCLI開発用のフレームワークです • CLIで提供したい本来の機能の開発に集中できます • pbrは独自Pythonコードのパッケージ化を支援してくれます • cliffとpbrはOsloプロジェクトがメンテナンスしています • OpenStack OsloはIaaS管理基盤向けのライブラリ群です • Osloは、さまざまな機能をライブラリとして提供しています JAPAN OPENSTACK USER GROUP 31 JULY TECH FESTA 2016
  • 32. 04 JAPAN OPENSTACK USER GROUP 32 ちょっとエモーショナル JULY TECH FESTA 2016 今年は何かいいことしませんか? 社会貢献ってやつですよ:-)
  • 33. ちょっとエモーショナル JAPAN OPENSTACK USER GROUP 33 JULY TECH FESTA 2016 我々が得ている OSSからの恩恵
  • 34. 恩返しをしませんか? 一方的に利用するだけではなく、OSSに貢献してみませんか? July Tech Festaに参加している皆さんなら、すぐにでもできるこ とが何かあります! • OSSのユーザグループに参加してノウハウをシェア(自慢もできて満足) • 勉強会を企画・運営する • カンファレンスのボランティアとして協力する • OSSプロダクトのドキュメント翻訳プロジェクトに参加する • バグレポートを出す • コードを書く • コードをレビューする • あなたが大富豪なら開発資金を寄付する JAPAN OPENSTACK USER GROUP 34 JULY TECH FESTA 2016
  • 35. You can do it if you try:) Thank you! JAPAN OPENSTACK USER GROUP 35 JULY TECH FESTA 2016
  • 36. 参考にした情報 • OpenStack - https://wiki.openstack.org/wiki/Main_Page • Oslo - OpenStack - https://wiki.openstack.org/wiki/Oslo • Contribute to OpenStack - https://wiki.openstack.org/wiki/How_To_Contribute • python-slackclient - http://python-slackclient.readthedocs.io/en/latest/index.html • Slack - Creating and regenerating API tokens - https://api.slack.com/bot-users JAPAN OPENSTACK USER GROUP 36 JULY TECH FESTA 2016