ファイル/シンボリックリンクのフルパスを表示する
ファイルのフルパスを取得する
readlink -f <フルパスを取得したいファイル名>
例:
$ pwd /home/ec2-user $ ls amazon-ssm-agent.rpm tmp $ readlink -f amazon-ssm-agent.rpm /home/ec2-user/amazon-ssm-agent.rpm $ ln amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk $ ls -li total 11492 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm.lnk 1966084 drwxrwxr-x 2 ec2-user ec2-user 4096 Apr 28 09:59 tmp $ readlink -f amazon-ssm-agent.rpm.lnk /home/ec2-user/amazon-ssm-agent.rpm.lnk
注意点: ファイルが存在しない場合に実行すると、存在しないファイルのフルパスを返してしまうので注意が必要です
$ ls amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk tmp $ readlink -f amazon-ssm-agent.rpm.test /home/ec2-user/amazon-ssm-agent.rpm.test $ ls amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk tmp
シンボリックリンクのリンク元を取得する
フルパス取得の場合と同じです。
readlink -f <フルパスを取得したいファイル名>
例:
$ ln -s amazon-ssm-agent.rpm /home/ec2-user/amazon-ssm-agent.rpm.slink $ ls amazon-ssm-agent.rpm amazon-ssm-agent.rpm.slink tmp $ readlink -f amazon-ssm-agent.rpm.slink /home/ec2-user/amazon-ssm-agent.rpm
補足
所属会社のブログで投稿した内容です ファイル/シンボリックリンクのフルパスを表示する - ForgeVision Engineer Blog
OpenStack で Snapshot(image) の状態をMackerelで監視するスクリプト
久しぶりにRuby書いた。力技感がすごい。
そしてMackerelは本当に便利。使うほどに好きになる。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'httpclient' require 'json' class Nova def keystone auth_request_json = '{ "auth" : { "tenantName" : "テナント名", "passwordCredentials" : { "username" : "ユーザ名", "password" : "いつもの" } } }' keystone_client = HTTPClient.new keystone_endpoint_uri = 'http://OpenStackのURL:35357/v2.0/tokens' keystone_response = keystone_client.post_content(keystone_endpoint_uri, auth_request_json, 'Content-Type' => 'application/json' ) keystone_response_hashed = JSON.parse(keystone_response) keystone_response_endpoint_parsed = keystone_response_hashed['access']['serviceCatalog'][0]['endpoints'][0] @nova_endpoint_uri = keystone_response_endpoint_parsed.values[0] @keystone_auth_token = keystone_response_hashed['access']['token']['id'] end def nova_images keystone nova_images_client = HTTPClient.new(default_header: {"X-Auth-Token" => @keystone_auth_token }) nova_images_endpoint_uri = @nova_endpoint_uri + "/images/detail" nova_images_response = nova_images_client.get_content(nova_images_endpoint_uri, "q" => "status" ) nova_images_response_hasged = JSON.parse(nova_images_response) return nova_images_response_hasged end end i = 0 image_init = Nova.new image_parsed = image_init.nova_images["images"] image_status = "none" while image_parsed.size > i do if image_parsed[i]["status"] != "ACTIVE" image_status = image_parsed[i]["name"] + " is " + image_parsed[i]["status"] p image_status end i += 1 end p "snapshots are all active." if image_status == "none" exit (image_status != "none" ? 2 : image_status == "none" ? 0 : 1)
あとは、mackerel-agent.confでカスタムスクリプトを追加してスクリプトを実行すればOK。
snapshot(image)がACTIVE以外のものがあった場合、リスト化してMackerelに表示される。
notification_interval=30、max_check_attempts=3あたりがおすすめ。
ansibleでvars_promptを使う場合
その後、更新。
ansibleではじめてvars_promptを使ったけどクソはまったのでメモ。
vars_promptは playbookトップディレクトリの xxx.yml 書く
この時、注意しないといけないのは、vars_promptはroles配下で更に1行上にhostsを定義してあげる必要がある。
公式のドキュメントを読む限りだとそのような規約はないっぽいのだけれど・・・。
一応、色々試行した結果、下記のやり方だと通ったので、とりあえずこれでいく。
task/xxx.ymlの書き方が悪かっただけだった・・・。 テストでtags=testとしていたのが原因だったようだ。
--- --- - hosts: webservers roles: - common - web - app #- hosts: webservers vars_prompt: - name: "stdin_print" prompt: "Please enter your password" private: yes default: "none" # roles: # - app
アップデートがあれば追記する。