Confman

 view release on metacpan or  search on metacpan

lib/Confman/API.pm  view on Meta::CPAN

  my $self = shift;
  return if $self->{no_cloud};
  $self->{cloud_metadata} ||= $self->aws_metadata;
  $self->{cloud_metadata};
}

sub aws_metadata {
  my $self = shift;
  return $self->{aws_metadata} if $self->{aws_metadata};

  my @fields = qw(
      instance-id ami-id availability-zone
      instance-type
      kernel-id local-hostname
      mac public-hostname
  );

  $self->{aws_metadata} = {};

  my $client = REST::Client->new();
  $client->setHost("http://169.254.169.254/latest/meta-data");
  $client->setTimeout(1);

  foreach my $field (@fields) {
    $client->GET($field);
    if($client->responseCode() =~ /2\d\d/) {
      $self->{aws_metadata}{$field} = $client->responseContent();
      $self->{aws_metadata}{type} = 'aws';
    }
    elsif(scalar(keys %{$self->{aws_metadata}}) == 0) {
      last;
    }
  }

  return $self->{aws_metadata};
}


package Confman::ConfSet;

sub new {
  my $class = shift;
  my $api = shift;
  my %conf = @_;
  my $self = bless(\%conf, ref($class) || $class);
  $self->{api} = $api;

  {
    no strict 'refs';
    foreach my $key (keys %{$self->pairs}) {
      *{$class.'::'.$key} = sub {
        my $self = shift;
        $self->{pairs}{$key};
      } unless($self->can($key));
    }
  }

  $self;
}

sub update_pairs {
  my $self = shift;
  my %pairs = @_;
  my ($results, $response) = $self->api->request('PUT', "confman/sets/$self->{id}/update_pairs", {
      conf_pairs => \%pairs
  });
}

sub api {
  my $self = shift;
  return $self->{api};
}

sub pairs {
  my $self = shift;
  unless($self->{pairs}) {
    $self->{pairs} = {};
    foreach my $pair (@{$self->{conf_pairs}}) {
      $self->{pairs}{$pair->{name}} = $pair->{value};
    }
  }
  return $self->{pairs};
}

1;



( run in 1.133 second using v1.01-cache-2.11-cpan-39bf76dae61 )