Files
ubicloud/spec/prog/minio/setup_minio_spec.rb
Jeremy Evans 4b819d3cb2 Change all create_with_id to create
It hasn't been necessary to use create_with_id since
ebc79622df, in December 2024.

I have plans to introduce:

```ruby
def create_with_id(id, values)
  obj = new(values)
  obj.id = id
  obj.save_changes
end
```

This will make it easier to use the same id when creating
multiple objects.  The first step is removing the existing
uses of create_with_id.
2025-08-06 01:55:51 +09:00

163 lines
7.0 KiB
Ruby

# frozen_string_literal: true
require_relative "../../model/spec_helper"
RSpec.describe Prog::Minio::SetupMinio do
subject(:nx) { described_class.new(Strand.new) }
let(:minio_server) {
prj = Project.create(name: "default")
ps = Prog::Vnet::SubnetNexus.assemble(
prj.id, name: "minio-cluster-name"
)
mc = MinioCluster.create(
location_id: Location::HETZNER_FSN1_ID,
name: "minio-cluster-name",
admin_user: "minio-admin",
admin_password: "dummy-password",
private_subnet_id: ps.id,
root_cert_1: "root_cert_1",
root_cert_key_1: "root_cert_key_1",
root_cert_2: "root_cert_2",
root_cert_key_2: "root_cert_key_2",
project_id: prj.id
)
mp = MinioPool.create(
start_index: 0,
cluster_id: mc.id,
vm_size: "standard-2",
server_count: 1,
drive_count: 1
)
MinioServer.create(
minio_pool_id: mp.id,
vm_id: create_vm.id,
index: 0,
cert: "cert",
cert_key: "key"
)
}
before do
nx.instance_variable_set(:@minio_server, minio_server)
sshable = instance_double(Sshable, host: "host")
allow(minio_server.vm).to receive(:sshable).and_return(sshable)
end
describe ".install_minio" do
it "pops if minio is installed" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check install_minio").and_return("Succeeded")
expect { nx.install_minio }.to exit({"msg" => "minio is installed"})
end
it "installs minio if failed" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check install_minio").and_return("Failed")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer 'minio/bin/install_minio minio_20240406052602.0.0_amd64' install_minio")
expect { nx.install_minio }.to nap(5)
end
it "naps if check returns unknown" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check install_minio").and_return("Unknown")
expect { nx.install_minio }.to nap(5)
end
it "installs minio if NotStarted" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check install_minio").and_return("NotStarted")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer 'minio/bin/install_minio minio_20240406052602.0.0_amd64' install_minio")
expect { nx.install_minio }.to nap(5)
end
end
describe ".configure_minio" do
let(:config) {
minio_config = <<ECHO
MINIO_VOLUMES="/minio/dat1"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER="minio-admin"
MINIO_ROOT_PASSWORD="dummy-password"
MINIO_SERVER_URL="https://minio-cluster-name.minio.ubicloud.com:9000"
ECHO
minio_hosts = <<ECHO
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
127.0.0.1 minio-cluster-name0.minio.ubicloud.com
ECHO
JSON.generate({
minio_config: minio_config,
hosts: minio_hosts,
cert: "cert",
cert_key: "key",
ca_bundle: "root_cert_1" + "root_cert_2"
}).chomp
}
before do
allow(DnsZone).to receive(:where).and_return([instance_double(DnsZone, name: "minio.ubicloud.com")])
end
it "configures minio if not started" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check configure_minio").and_return("NotStarted")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer 'sudo minio/bin/configure-minio' configure_minio", stdin: config)
expect { nx.configure_minio }.to nap(5)
end
it "configures minio without server_url if dns is not configures" do
expect(nx.minio_server.cluster).to receive(:dns_zone).and_return(false)
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check configure_minio").and_return("NotStarted")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer 'sudo minio/bin/configure-minio' configure_minio", stdin: config.gsub("MINIO_SERVER_URL=\\\"https://minio-cluster-name.minio.ubicloud.com:9000\\\"", ""))
expect { nx.configure_minio }.to nap(5)
end
it "pops if minio is configured" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check configure_minio").and_return("Succeeded")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --clean configure_minio")
expect { nx.configure_minio }.to exit({"msg" => "minio is configured"})
end
it "configures minio if failed" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check configure_minio").and_return("Failed")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer 'sudo minio/bin/configure-minio' configure_minio", stdin: config)
expect { nx.configure_minio }.to nap(5)
end
it "naps if check returns unknown" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check configure_minio").and_return("Unknown")
expect { nx.configure_minio }.to nap(5)
end
end
describe ".mount_data_disks" do
it "mounts data disks" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check format_disks").and_return("Succeeded")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("sudo mkdir -p /minio")
expect(nx.minio_server.vm).to receive_message_chain(:vm_storage_volumes_dataset, :order_by, :where, :all).and_return([instance_double(VmStorageVolume, boot: false, device_path: "/dev/dummy")]) # rubocop:disable RSpec/MessageChain
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("sudo mkdir -p /minio/dat1")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("sudo common/bin/add_to_fstab /dev/dummy /minio/dat1 xfs defaults 0 0")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("sudo mount /dev/dummy /minio/dat1")
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("sudo chown -R minio-user:minio-user /minio")
expect { nx.mount_data_disks }.to exit({"msg" => "data disks are mounted"})
end
it "formats data disks" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check format_disks").and_return("Failed")
expect(nx.minio_server.vm).to receive_message_chain(:vm_storage_volumes_dataset, :order_by, :where, :all).and_return([instance_double(VmStorageVolume, boot: false, device_path: "/dev/dummy")]) # rubocop:disable RSpec/MessageChain
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer 'sudo mkfs --type xfs /dev/dummy' format_disks")
expect { nx.mount_data_disks }.to nap(5)
end
it "naps if check returns unknown" do
expect(nx.minio_server.vm.sshable).to receive(:cmd).with("common/bin/daemonizer --check format_disks").and_return("Unknown")
expect { nx.mount_data_disks }.to nap(5)
end
end
end