@wocker/ws
Version:
Docker workspace for web projects
78 lines (77 loc) • 3.43 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DnsService = void 0;
const core_1 = require("@wocker/core");
const docker_module_1 = require("@wocker/docker-module");
const path_1 = __importDefault(require("path"));
const env_1 = require("../../../env");
let DnsService = class DnsService {
constructor(dockerService) {
this.dockerService = dockerService;
this.imageName = "wocker-dns:0.0.1";
this.containerName = "wocker-dns";
}
async start(restart, rebuild) {
console.info("Starting DNS service...");
console.info("DNS service currently isn't working");
if (restart || rebuild) {
await this.dockerService.removeContainer(this.containerName);
}
await this.build(rebuild);
let container = await this.dockerService.getContainer(this.containerName);
const fs = new core_1.FileSystem(`${env_1.ROOT_DIR}/plugins/dns`);
if (!fs.exists("etc/dnsmasq.conf")) {
fs.writeFile("etc/dnsmasq.conf", "");
}
if (!container) {
container = await this.dockerService.createContainer({
name: this.containerName,
image: this.imageName,
volumes: [
"/var/run/docker.sock.raw:/var/run/docker.sock:ro",
"/var/run/docker.sock.raw:/tmp/docker.sock:ro",
`${fs.path("app/Procfile")}:/app/Procfile`,
`${fs.path("app/dnsmasq.conf.tmpl")}:/app/dnsmasq.conf.tmpl`,
`${fs.path("etc/dnsmasq.conf")}:/etc/dnsmasq.conf`
]
});
}
const { State: { Running } } = await container.inspect();
if (!Running) {
await container.start();
}
}
async stop() {
await this.dockerService.removeContainer(this.containerName);
}
async build(rebuild) {
if (await this.dockerService.imageExists(this.imageName)) {
if (!rebuild) {
return;
}
await this.dockerService.imageRm(this.imageName);
}
await this.dockerService.buildImage({
tag: this.imageName,
dockerfile: "./Dockerfile",
context: path_1.default.join(env_1.ROOT_DIR, "fixtures/dns")
});
}
};
exports.DnsService = DnsService;
exports.DnsService = DnsService = __decorate([
(0, core_1.Injectable)(),
__metadata("design:paramtypes", [docker_module_1.DockerService])
], DnsService);