/var/log/messages

Apr 6, 2014 - 2 minute read - Comments - Ruby

諸々備忘

gem 改造して試験してみたい。どうするか。

探索パスが $LOAD_PATH に格納されているらしい。

$LOAD_PATH.unshift('./gems')

みたいにしといて、実行するディレクトリに gem を掘ってその中に gem なナニを git clone とかで持ってきとけば良いのかな。

もうひとつ。

fog の cloudstack な API 呼び出しの i/f 追加したい。まだ試してないのですが、方法を以下に控えておきます。

fog/cloudstack/compute.rb に以下を追加。

    request :extract_template

あとは fog/cloudstack/requests/compute に extract_template.rb を追加して中身は以下なカンジ?

module Fog
  module Compute
    class Cloudstack
      class Real

        def extract_template(options={})
          options.merge!(
            'command' => 'extractTemplates'
          )

          request(options)
        end

  end # Real

Mock なナニはとりあえず略。試験したら別途追記の方向ってことで。

追記

試してみました。とりあえず http://github.com/fog/fog を fork してそれを手元に clone してとりあえず branch して

$ mkdir gems
$ cd gems
$ cd fog
$ git checkout -b extractTemplate

あと、とりあえず試験用のソレに以下の記述を追加。

$:.unshift File.dirname(__FILE__) + "/gems"

次。とりあえず fog 側に手続き追加。fog/cloudstack/compute.rb に以下を追加

      request :extract_template

で、fog/cloudstack/request/compute/extract_template.rb はとりあえず以下なカンジ。

    def extractt_templates(options={})
      options.merge!(
        'command' => 'extracttTemplate'
      )

      # request(options)
      pp "xxx"
      "xxx"
    end

これでテスト用のスクリプトで

pp @compute.extractTemplate

呼び出してどうなるか。

list_template.rb:35:in <main>': undefined method extractTemplate’ for #Fog::Compute::Cloudstack::Real:0x007f0fd0033cc0 (NoMethodError)

ぐぬ。パスが確認できるのか。

irb(main):009:0> Gem::Specification.find_by_path("fog").full_gem_path
=> "/home/rms/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/fog-1.8.0"

駄目だ。つうかこれ、gem build しないと駄目なの?

$ cd fog
$ gem build fog.gemspec
  Successfully build RubyGem
  Name: fog
  Version: 1.21.0
  File: fog-1.21.0.gem

うーん、なんか違う感。これは gem i できる .gem ができただけだし。

結局入れないと駄目らしい

ので、以下。

$ gem i fog-1.21.0/fog-1.21.0.gem

.rbenv 配下にも入ってるみたい。修正して入れかえ、は

$ gem uninstall fog-1.21.0

で良いのかどうか。require したら新しい方が入ってるみたい。uninstall は以下なのかどうか。

$ gem uninstall fog -v='1.21.0'

つうか、extract_template 手続きが盛り込まれていない。何故だ。

もっかい

lib/fog/cloudstack/requests/compute/extract_template.rb 存在を確認。

$ ls lib/fog/cloudstack/requests/compute/extract_template.rb
lib/fog/cloudstack/requests/compute/extract_template.rb

gem 作る。

$ gem build fog.gemspec

導入。

$ gem i ./fog-1.21.0.gem

中身確認するもやはり extract_template.rb が無い。build された gem を確認してみるにやはり無い。gem ではなくて rake で build してみるか。

$ bundle install
$ bundle exec rake build

pkg の中にできるんですね。がしかし、.gem をバラしてみても lib の中にあるはずのソレが無い。むむ、と言いつつバラしたソレについて lib/fog/cloudstack/compute.rb 見てみるに、こちらの修正は反映されとるな。

で、git add してみたら今度は反映されていた。何なのこれ。

別件にて追記

bundler て jail みたいなもの、って理解だったんですが全然違うことに最近気が付いてたり。