Created
July 4, 2012 09:21
-
-
Save lamanotrama/3046312 to your computer and use it in GitHub Desktop.
N::A::EC2 に色々生やすサンプル
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package Net::Amazon::EC2::PaperboyAttributes; | |
use strict; | |
use warnings; | |
use Net::Amazon::EC2 0.18; | |
use JSON qw/decode_json/; | |
Net::Amazon::EC2::RunningInstances->meta->make_mutable(); | |
Net::Amazon::EC2->meta->make_mutable(); | |
Net::Amazon::EC2::RunningInstances->meta->add_attribute( | |
'roles' => ( | |
is => 'ro', | |
isa => 'ArrayRef[Str]', | |
lazy => 1, | |
builder => 'Net::Amazon::EC2::PaperboyAttributes::_build_roles', | |
) | |
); | |
# is_active にすればよかったと思ってる… | |
Net::Amazon::EC2::RunningInstances->meta->add_attribute( | |
'inactive' => ( | |
is => 'ro', | |
isa => 'Bool', | |
lazy => 1, | |
builder => 'Net::Amazon::EC2::PaperboyAttributes::_build_inactive', | |
) | |
); | |
Net::Amazon::EC2->meta->add_method( | |
'describe_roles' => \&_describe_roles | |
); | |
Net::Amazon::EC2::RunningInstances->meta->make_immutable(); | |
Net::Amazon::EC2->meta->make_immutable(); | |
sub _build_roles { | |
my $self = shift; | |
return [] unless $self->tag_set; | |
my ($roles) = | |
grep { $_->{key} eq 'role' } | |
@{ $self->tag_set }; | |
return [] unless $roles; | |
return decode_json( $roles->{value} ); | |
} | |
sub _build_inactive { | |
my $self = shift; | |
return 0 unless $self->tag_set; | |
my ($inactive) = | |
grep { $_->{key} eq 'inactive' } | |
@{ $self->tag_set }; | |
return 0 unless defined $inactive; | |
return $inactive->{value} ? 1 : 0; | |
}; | |
sub _describe_roles { | |
my ($self, %args) = @_; | |
my @instances = | |
grep { $_->roles } | |
grep { $_->name } | |
map { $_->instances_set } | |
@{ $self->describe_instances }; | |
if ( exists $args{active_only} | |
and $args{active_only} eq '1' | |
) { | |
@instances = grep { ! $_->inactive } @instances; | |
} | |
my $roles = {}; | |
for my $ins ( @instances ) { | |
map { | |
push @{ $roles->{$_} ||= [] }, $ins->name | |
} @{ $ins->roles }; | |
} | |
return $roles; | |
}; | |
1; | |
__END__ | |
=encoding utf8 | |
=head1 NAME | |
Net::Amazon::EC2::PaperboyAttributes | |
=head1 SYNOPSIS | |
use Net::Amazon::EC2 0.18; | |
use Net::Amazon::EC2::PaperboyAttributes; | |
my $roles = $ec2->describe_roles; | |
unless ( $instance->inactive ) { | |
my $roles = $instance->roles; | |
print "name: ", $instance->name, "\n"; | |
print join " ", "roles:", @{ $instance->roles }, "\n"; | |
} | |
=head1 DESCRIPTION | |
ペパボの使い方に合わせて、N::A::EC2に幾つかattrsとメソッドを足すもの。 | |
=over | |
=item N::A::EC2::RunningInstances::roles | |
インスタンスのrole tagにJSONのarrayで記述された内容をArrayRefで返します。 | |
=item N::A::EC2::RunningInstances::inactive | |
インスタンスにinactiveタグがあって、それがtrue(1)の場合はtrueを返します。 | |
それ以外は全部falseです。 | |
=item N::A::EC2::describe_roles(%prams) | |
roleをkeyとして、instanceのnameをvalueに持ったHashRefを返します。 | |
## 例 | |
{ | |
'mx' => [ | |
'mx001', | |
'mx002' | |
], | |
'base' => [ | |
'manage001', | |
'mx001', | |
'mx002', | |
], | |
manage => [ | |
'manage001', | |
], | |
} | |
パラメータに active_only => 1 を付けると、inactiveなインスタンスは除外します。 | |
=back | |
=head1 AUTHOR | |
@lamanotrama | |
=cut | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package Net::Amazon::EC2::PaperboyAttributes; | |
use strict; | |
use warnings; | |
use Net::Amazon::EC2 0.18; | |
use JSON qw/decode_json/; | |
Net::Amazon::EC2::RunningInstances->meta->make_mutable(); | |
Net::Amazon::EC2->meta->make_mutable(); | |
Net::Amazon::EC2::RunningInstances->meta->add_attribute( | |
'roles' => ( | |
is => 'ro', | |
isa => 'ArrayRef[Str]', | |
lazy => 1, | |
builder => 'Net::Amazon::EC2::PaperboyAttributes::_build_roles', | |
) | |
); | |
# is_active にすればよかったと思ってる… | |
Net::Amazon::EC2::RunningInstances->meta->add_attribute( | |
'inactive' => ( | |
is => 'ro', | |
isa => 'Bool', | |
lazy => 1, | |
builder => 'Net::Amazon::EC2::PaperboyAttributes::_build_inactive', | |
) | |
); | |
Net::Amazon::EC2->meta->add_method( | |
'describe_roles' => \&_describe_roles | |
); | |
Net::Amazon::EC2::RunningInstances->meta->make_immutable(); | |
Net::Amazon::EC2->meta->make_immutable(); | |
sub _build_roles { | |
my $self = shift; | |
return [] unless $self->tag_set; | |
my ($roles) = | |
grep { $_->{key} eq 'role' } | |
@{ $self->tag_set }; | |
return [] unless $roles; | |
return decode_json( $roles->{value} ); | |
} | |
sub _build_inactive { | |
my $self = shift; | |
return 0 unless $self->tag_set; | |
my ($inactive) = | |
grep { $_->{key} eq 'inactive' } | |
@{ $self->tag_set }; | |
return 0 unless defined $inactive; | |
return $inactive->{value} ? 1 : 0; | |
}; | |
sub _describe_roles { | |
my ($self, %args) = @_; | |
my @instances = | |
grep { $_->roles } | |
grep { $_->name } | |
map { $_->instances_set } | |
@{ $self->describe_instances }; | |
if ( exists $args{active_only} | |
and $args{active_only} eq '1' | |
) { | |
@instances = grep { ! $_->inactive } @instances; | |
} | |
my $roles = {}; | |
for my $ins ( @instances ) { | |
map { | |
push @{ $roles->{$_} ||= [] }, $ins->name | |
} @{ $ins->roles }; | |
} | |
return $roles; | |
}; | |
1; | |
__END__ | |
=encoding utf8 | |
=head1 NAME | |
Net::Amazon::EC2::PaperboyAttributes | |
=head1 SYNOPSIS | |
use Net::Amazon::EC2 0.18; | |
use Net::Amazon::EC2::PaperboyAttributes; | |
my $roles = $ec2->describe_roles; | |
unless ( $instance->inactive ) { | |
my $roles = $instance->roles; | |
print "name: ", $instance->name, "\n"; | |
print join " ", "roles:", @{ $instance->roles }, "\n"; | |
} | |
=head1 DESCRIPTION | |
ペパボの使い方に合わせて、N::A::EC2に幾つかattrsとメソッドを足すもの。 | |
=over | |
=item N::A::EC2::RunningInstances::roles | |
インスタンスのrole tagにJSONのarrayで記述された内容をArrayRefで返します。 | |
=item N::A::EC2::RunningInstances::inactive | |
インスタンスにinactiveタグがあって、それがtrue(1)の場合はtrueを返します。 | |
それ以外は全部falseです。 | |
=item N::A::EC2::describe_roles(%prams) | |
roleをkeyとして、instanceのnameをvalueに持ったHashRefを返します。 | |
## 例 | |
{ | |
'mx' => [ | |
'mx001', | |
'mx002' | |
], | |
'base' => [ | |
'manage001', | |
'mx001', | |
'mx002', | |
], | |
manage => [ | |
'manage001', | |
], | |
} | |
パラメータに active_only => 1 を付けると、inactiveなインスタンスは除外します。 | |
=back | |
=head1 AUTHOR | |
@lamanotrama | |
=cut | |
syntax効いてなかったので、ファイル名変えただけのやつ足しました。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
sqaleの運用ルールに依存した実装なので、サンプルとして見てください。