SlideShare a Scribd company logo
1 of 36
Download to read offline
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

What's hot

PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collectionakira6592
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テストTakahiro Moteki
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallAtsushi Tanaka
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会ShuheiUda
 
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)Trainocate Japan, Ltd.
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep DiveToru Makabe
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)Trainocate Japan, Ltd.
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
L2 over L3 ecnaspsulations
L2 over L3 ecnaspsulationsL2 over L3 ecnaspsulations
L2 over L3 ecnaspsulationsMotonori Shindo
 

What's hot (20)

PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collection
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)
Amazon ECS AWS Fargate あるとき~ ないとき~ (トレノケ雲の会 mod2)
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
AWS BlackBelt AWS上でのDDoS対策
AWS BlackBelt AWS上でのDDoS対策AWS BlackBelt AWS上でのDDoS対策
AWS BlackBelt AWS上でのDDoS対策
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
L2 over L3 ecnaspsulations
L2 over L3 ecnaspsulationsL2 over L3 ecnaspsulations
L2 over L3 ecnaspsulations
 

Viewers also liked

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

Viewers also liked (12)

OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
 
OpenStack 最新動向 2016/11
OpenStack 最新動向 2016/11OpenStack 最新動向 2016/11
OpenStack 最新動向 2016/11
 
密かに話題のBufferbloat
密かに話題のBufferbloat密かに話題のBufferbloat
密かに話題のBufferbloat
 
Nutanixってナニ?
Nutanixってナニ?Nutanixってナニ?
Nutanixってナニ?
 
Nutanixを導入してみて思ったこと(仮)
Nutanixを導入してみて思ったこと(仮)Nutanixを導入してみて思ったこと(仮)
Nutanixを導入してみて思ったこと(仮)
 
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Google Container Engine と Kubernetes で 無理をしないコンテナ管理Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
 
Yahoo! JAPANが実践するOpenStackと大規模環境でのコンテナ利用 #devsumi
Yahoo! JAPANが実践するOpenStackと大規模環境でのコンテナ利用 #devsumiYahoo! JAPANが実践するOpenStackと大規模環境でのコンテナ利用 #devsumi
Yahoo! JAPANが実践するOpenStackと大規模環境でのコンテナ利用 #devsumi
 
実用段階に入ったOpenStack ~ もうすぐ絶滅するというPrivate Cloudの多様性について ~
実用段階に入ったOpenStack ~ もうすぐ絶滅するというPrivate Cloudの多様性について ~実用段階に入ったOpenStack ~ もうすぐ絶滅するというPrivate Cloudの多様性について ~
実用段階に入ったOpenStack ~ もうすぐ絶滅するというPrivate Cloudの多様性について ~
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
OpenStack on OpenStack
OpenStack on OpenStackOpenStack on OpenStack
OpenStack on OpenStack
 
mTCP使ってみた
mTCP使ってみたmTCP使ってみた
mTCP使ってみた
 
Fluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log ManagementFluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log Management
 

Similar to OpenStack Osloを使おう - cliff編

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

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

OpenStackをさらに”使う”技術 概要と基礎操作
OpenStackをさらに”使う”技術 概要と基礎操作OpenStackをさらに”使う”技術 概要と基礎操作
OpenStackをさらに”使う”技術 概要と基礎操作
 
OpenStack Now!
OpenStack Now!OpenStack Now!
OpenStack Now!
 
Interop2014 - OpenStackの概要と最新技術動向(Icehouse)
Interop2014 - OpenStackの概要と最新技術動向(Icehouse)Interop2014 - OpenStackの概要と最新技術動向(Icehouse)
Interop2014 - OpenStackの概要と最新技術動向(Icehouse)
 
Ansible2とOpenStackの関係
Ansible2とOpenStackの関係Ansible2とOpenStackの関係
Ansible2とOpenStackの関係
 
OSC2013 Tokyo Spring OpenStack Overview
OSC2013 Tokyo Spring OpenStack OverviewOSC2013 Tokyo Spring OpenStack Overview
OSC2013 Tokyo Spring OpenStack Overview
 
JTF2014:OpenStackの概要と最新技術動向
JTF2014:OpenStackの概要と最新技術動向JTF2014:OpenStackの概要と最新技術動向
JTF2014:OpenStackの概要と最新技術動向
 
OSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUGOSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUG
 
OpenStackSDK with Ansible
OpenStackSDK with AnsibleOpenStackSDK with Ansible
OpenStackSDK with Ansible
 
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話
 
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解するパブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解する
 
OpenStack on Softlayer
OpenStack on SoftlayerOpenStack on Softlayer
OpenStack on Softlayer
 
JJUG CCC 2014 ATL
JJUG CCC 2014 ATLJJUG CCC 2014 ATL
JJUG CCC 2014 ATL
 
OpenStack Summit Austin 2016 参加報告 - OpenStack最新情報セミナー 2016年5月
OpenStack Summit Austin 2016 参加報告 - OpenStack最新情報セミナー 2016年5月OpenStack Summit Austin 2016 参加報告 - OpenStack最新情報セミナー 2016年5月
OpenStack Summit Austin 2016 参加報告 - OpenStack最新情報セミナー 2016年5月
 
OSC2016 Tokyo/Spring セミナー資料
OSC2016 Tokyo/Spring セミナー資料OSC2016 Tokyo/Spring セミナー資料
OSC2016 Tokyo/Spring セミナー資料
 
CloudStack Ecosystem Day - OpenStack/Swift
CloudStack Ecosystem Day - OpenStack/SwiftCloudStack Ecosystem Day - OpenStack/Swift
CloudStack Ecosystem Day - OpenStack/Swift
 
Open stack nova_austin報告書
Open stack nova_austin報告書Open stack nova_austin報告書
Open stack nova_austin報告書
 
Invitation to the Open Cloud Campus #osckansai 2011
Invitation to the Open Cloud Campus #osckansai 2011Invitation to the Open Cloud Campus #osckansai 2011
Invitation to the Open Cloud Campus #osckansai 2011
 
OpenStack Summit Vancouver YVR Ops
OpenStack Summit Vancouver YVR OpsOpenStack Summit Vancouver YVR Ops
OpenStack Summit Vancouver YVR Ops
 
OpenCloudCampus : Cloud Technologies Meeting (OpenStack)
OpenCloudCampus : Cloud Technologies Meeting (OpenStack)OpenCloudCampus : Cloud Technologies Meeting (OpenStack)
OpenCloudCampus : Cloud Technologies Meeting (OpenStack)
 
Japan OSS promotion Forum symposium - Neaoss wg2 activity
Japan OSS promotion Forum symposium - Neaoss wg2 activityJapan OSS promotion Forum symposium - Neaoss wg2 activity
Japan OSS promotion Forum symposium - Neaoss wg2 activity
 

More from Hideki Saito

これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024Hideki Saito
 
Ansible automationplatform product updates 2021
Ansible automationplatform product updates 2021Ansible automationplatform product updates 2021
Ansible automationplatform product updates 2021Hideki Saito
 
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Hideki Saito
 
Ansible Fest 2020 技術トピックまとめ
Ansible Fest 2020 技術トピックまとめAnsible Fest 2020 技術トピックまとめ
Ansible Fest 2020 技術トピックまとめHideki Saito
 
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NGGetting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NGHideki Saito
 
Ansible troubleshooting 101_202007
Ansible troubleshooting 101_202007Ansible troubleshooting 101_202007
Ansible troubleshooting 101_202007Hideki Saito
 
How to contribute code to ansible awx
How to contribute code to ansible awxHow to contribute code to ansible awx
How to contribute code to ansible awxHideki Saito
 
Update: Ansible Tower 3.6.0
Update: Ansible Tower 3.6.0Update: Ansible Tower 3.6.0
Update: Ansible Tower 3.6.0Hideki Saito
 
How to contribute AWX
How to contribute AWXHow to contribute AWX
How to contribute AWXHideki Saito
 
Ansible Tower on OpenShift
Ansible Tower on OpenShiftAnsible Tower on OpenShift
Ansible Tower on OpenShiftHideki Saito
 
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWXIT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWXHideki Saito
 
IT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWXIT Automation with OpenStack and Ansible/AWX
IT Automation with OpenStack and Ansible/AWXHideki Saito
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016Hideki Saito
 
OpenStack & Ansible で実現する自動化
OpenStack & Ansible で実現する自動化OpenStack & Ansible で実現する自動化
OpenStack & Ansible で実現する自動化Hideki Saito
 
Okinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - AnsibleOkinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - AnsibleHideki Saito
 
OpenStack with SR-IOV
OpenStack with SR-IOVOpenStack with SR-IOV
OpenStack with SR-IOVHideki Saito
 
Ansible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic InventoryAnsible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic InventoryHideki Saito
 

More from Hideki Saito (20)

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

Recently uploaded

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Recently uploaded (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

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 = 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.
  • 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