require 'etude_for_aws'

namespace :EC2 do

task :default => :create_type01_env

desc 'シンプルなVPC環境にEC2インスタンスを作成する'
task :create_simple_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::SimpleVpc.new)
  vpc_director.create
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).create
end

desc 'シンプルなVPC環境のEC2インスタンスを削除する'
task :destroy_simple_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::SimpleVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).destroy
  vpc_director.destroy
end

desc 'シンプルなVPC環境にEC2インスタンス起動する'
task :start_simple_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::SimpleVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).start
end

desc 'シンプルなVPC環境にEC2インスタンス再起動する'
task :reboot_simple_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::SimpleVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).reboot
end

desc 'シンプルなVPC環境にEC2インスタンス停止する'
task :stop_simple_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::SimpleVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).stop
end

desc '標準的なVPC環境にEC2インスタンスを作成する'
task :create_standard_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::StandardVpc.new)
  vpc_director.create
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).create
end

desc '標準的なVPC環境のEC2インスタンスを削除する'
task :destroy_standard_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::StandardVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).destroy
  vpc_director.destroy
end

desc '標準的なVPC環境にEC2インスタンスを起動する'
task :start_standard_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::StandardVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).start
end

desc '標準的なVPC環境にEC2インスタンスを再起動する'
task :reboot_standard_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::StandardVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).reboot
end

desc '標準的なVPC環境にEC2インスタンスを停止する'
task :stop_standard_vpc_env do
  vpc_director = VPC::VpcDirector.new(VPC::StandardVpc.new)
  vpc = vpc_director.builder
  EC2::Ec2.new(vpc).stop
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットのVPC環境を作成する'
task :setup_type01_env => [:create_type01,:copy_key_pair] do
  puts '1つのアベイラビリティゾーンに1つのパブリックサブネットのVPC環境を作成しました。'
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットのVPC環境にEC2インスタンスを作成する'
task :create_type01 do
  vpc = CFM::OneAzOnePublicSubnetVpc.new
  vpc.create
  EC2::Ec2.new(vpc).create
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットのVPC環境のEC2インスタンスを削除する'
task :destroy_type01_env do
  vpc = CFM::OneAzOnePublicSubnetVpc.new
  EC2::Ec2.new(vpc).destroy
  vpc.destroy
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットのVPC環境にEC2インスタンスを停止する'
task :stop_type01 do
  vpc = CFM::OneAzOnePublicSubnetVpc.new
  EC2::Ec2.new(vpc).stop
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットのVPC環境にEC2インスタンスを起動する'
task :start_type01 do
  vpc = CFM::OneAzOnePublicSubnetVpc.new
  EC2::Ec2.new(vpc).start
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットのVPC環境にEC2インスタンスを再起動する'
task :reboot_type01 do
  vpc = CFM::OneAzOnePublicSubnetVpc.new
  EC2::Ec2.new(vpc).reboot
end

desc '1つのアベイラビリティゾーンに2つのパブリックサブネットのVPC環境にEC2インスタンスを作成する'
task :create_type02 do
  vpc = CFM::OneAzTwoPublicSubnetVpc.new
  vpc.create
  EC2::Ec2.new(vpc).create
end

desc '1つのアベイラビリティゾーンに2つのパブリックサブネットのVPC環境のEC2インスタンスを削除する'
task :destroy_type02_env do
  vpc = CFM::OneAzTwoPublicSubnetVpc.new
  EC2::Ec2.new(vpc).destroy
  vpc.destroy
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットと1つのプライベートサブネットのVPC環境にEC2インスタンスを作成する'
task :create_type03 do
  vpc = CFM::OneAzTwoPublicAndPrivateSubnetVpc.new
  vpc.create
  EC2::Ec2.new(vpc).create
end

desc '1つのアベイラビリティゾーンに1つのパブリックサブネットと1つのプライベートサブネットのVPC環境のEC2インスタンスを削除する'
task :destroy_type03_env do
  vpc = CFM::OneAzTwoPublicAndPrivateSubnetVpc.new
  EC2::Ec2.new(vpc).destroy
  vpc.destroy
end

desc '2つのアベイラビリティゾーンに2つのプライベートサブネットのVPC環境にEC2インスタンスを作成する'
task :create_type04 do
  vpc = CFM::TwoAzTwoPrivateSubnetVpc.new
  vpc.create
  EC2::Ec2.new(vpc).create
end

desc '2つのアベイラビリティゾーンに2つのプライベートサブネットのVPC環境のEC2インスタンスを削除する'
task :destroy_type04_env do
  vpc = CFM::TwoAzTwoPrivateSubnetVpc.new
  EC2::Ec2.new(vpc).destroy
  vpc.destroy
end

desc '2つのアベイラビリティゾーンに2つのパブリックサブネットのVPC環境にEC2インスタンスを作成する'
task :create_type05 do
  vpc = CFM::TwoAzTwoPublicSubnetVpc.new
  vpc.create
  EC2::Ec2.new(vpc).create
end

desc '2つのアベイラビリティゾーンに2つのパブリックサブネットのVPC環境のEC2インスタンスを削除する'
task :destroy_type05_env do
  vpc = CFM::TwoAzTwoPublicSubnetVpc.new
  EC2::Ec2.new(vpc).destroy
  vpc.destroy
end

desc '2つのアベイラビリティゾーンに1つのパブリックサブネットと1つのプライベートサブネットのVPC環境にEC2インスタンスを作成する'
task :create_type06 do
  vpc = CFM::TwoAzOnePublicSubnetAndPrivateSubnetVpc.new
  vpc.create
  EC2::Ec2.new(vpc).create
end

desc '2つのアベイラビリティゾーンに1つのパブリックサブネットと1つのプライベートサブネットのVPC環境のEC2インスタンスを削除する'
task :destroy_type06_env do
  vpc = CFM::TwoAzOnePublicSubnetAndPrivateSubnetVpc.new
  EC2::Ec2.new(vpc).destroy
  vpc.destroy
end

desc '2つのアベイラビリティゾーンに2つのパブリックサブネットと2つのプライベートサブネットのVPC環境にEC2インスタンスを作成する'
task :create_type07 do
  vpc = CFM::TwoAzTwoPublicSubnetAndPrivateSubnetVpc.new
  vpc.create
  EC2::Ec2.new(vpc).create
end

desc '2つのアベイラビリティゾーンに2つのパブリックサブネットと2つのプライベートサブネットVPCのVPC環境のEC2インスタンスを削除する'
task :destroy_type07_env do
  vpc = CFM::TwoAzTwoPublicSubnetAndPrivateSubnetVpc.new
  EC2::Ec2.new(vpc).destroy
  vpc.destroy
end

desc 'キーペアを作成する'
task :create_key_pair do
  ec2 = EC2::Ec2.new
  key_pair = EC2::KeyPair.new(ec2)
  key_pair.create
end

desc 'キーペアを削除する'
task :delete_key_pair do
  ec2 = EC2::Ec2.new
  key_pair = EC2::KeyPair.new(ec2)
  key_pair.delete
end

desc '作成したキーペアをコピーする'
task :copy_key_pair do
  yaml = YAML.load_file('aws_config.yml')
  key_pair_name = yaml['DEV']['EC2']['KEY_PAIR_NAME']
  path = Dir.pwd + yaml['DEV']['EC2']['KEY_PAIR_PATH']
  pem_file = path + "#{key_pair_name}.pem"
  FileUtils.cp(pem_file,Dir.pwd)
end

end