Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Florian Fordermaier committed Dec 15, 2019
0 parents commit 9b53f7d
Show file tree
Hide file tree
Showing 9 changed files with 189 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/lib/
/node_modules/
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# pulumix

My own extensions and helpers for use with pulumi.
20 changes: 20 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "pulumix",
"version": "1.0.0",
"description": "Some simple extensions and helpers for use with pulumi.",
"main": "index.js",
"scripts": {
"build": "tsc"
},
"homepage": "https://github.com/codedevote/pulumix",
"repository": {
"type": "git",
"url": "https://github.com/codedevote/pulumix.git"
},
"author": "[email protected]",
"license": "MIT",
"devDependencies": {
"@types/node": "^8.10.59",
"typescript": "^3.7.3"
},
"files": ["lib/**/*"]
}
14 changes: 14 additions & 0 deletions src/IDisposable.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
interface IDisposable {
dispose() : void;
}

function using<T extends IDisposable>(resource: T, func: (resource: T) => void) {
try {
func(resource);
} finally {
resource.dispose();
}
}

export default IDisposable;
export { IDisposable, using };
22 changes: 22 additions & 0 deletions src/TempYaml.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import * as fs from "fs"
import * as path from "path";
import { IDisposable } from "./IDisposable"

class TempYaml implements IDisposable {

fileName : string;
dir : string;

constructor(yaml: string) {
this.dir = fs.mkdtempSync("sarooma");
this.fileName = path.join(this.dir, "temp.yaml");
fs.writeFileSync(this.fileName, yaml);
}

dispose() {
fs.unlinkSync(this.fileName);
fs.rmdirSync(this.dir);
}
}

export default TempYaml;
30 changes: 30 additions & 0 deletions src/cert-manager/v0.12.0/certificate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import TempYaml from "../../TempYaml"

class Certificate {
/**
* Creates a ClusterIssuer resource using letsencrypt staging servers and returns the yaml as string.
*
* @param name Name of the cluster issuer resource
*/
public createCertificate(certName: string, namespace: string, dnsName: string, clusterIssuer: string) : TempYaml {

var certificateTemplate =
`apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: ${certName}
namespace: ${namespace}
spec:
secretName: ${certName}
commonName: ${dnsName}
dnsNames:
- ${dnsName}
issuerRef:
name: ${clusterIssuer}
kind: ClusterIssuer`;

return new TempYaml(certificateTemplate);
}
}

export default Certificate;
66 changes: 66 additions & 0 deletions src/cert-manager/v0.12.0/clusterissuer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import TempYaml from "../../TempYaml"

class ClusterIssuer {

/**
* Creates a ClusterIssuer resource using letsencrypt staging servers and returns the yaml as string.
*
* @param name Name of the cluster issuer resource
*/
public createForStaging(name: String) : TempYaml {
return this.createYaml(name, true);
}

/**
* Creates a ClusterIssuer resource using letsencrypt production servers and returns the yaml as string.
*
* @param name Name of the cluster issuer resource
*/
public createForProd(name: String) : TempYaml {
return this.createYaml(name, false);
}

private createYaml(name: String, forStaging: Boolean) : TempYaml {
const acmeServer =
forStaging
? "https://acme-staging-v02.api.letsencrypt.org/directory"
: "https://acme-v02.api.letsencrypt.org/directory";

const clusterIssuerTemplate =
`apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: ${name}
namespace: default
spec:
acme:
server: ${acmeServer}
email: [email protected]
privateKeySecretRef:
name: ${name}
# this is the 'new' way of defining solvers
solvers:
# empty selector will match all Certificate resources that reference this issuer.
# for selecting a specific solver from a Certificate resource (not required right now), see
# https://docs.cert-manager.io/en/latest/tasks/upgrading/upgrading-0.7-0.8.html#performing-an-incremental-switch-to-the-new-format
- selector: {}
dns01:
digitalocean:
tokenSecretRef:
name: dns01-solver-secret
key: token
- selector:
matchLabels:
use-http01-solver: "true"
http01:
ingress:
class: nginx`;

return new TempYaml(clusterIssuerTemplate);
}
}

export default ClusterIssuer;
export { ClusterIssuer };

11 changes: 11 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"declaration": true,
"outDir": "./lib",
"strict": true
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]
}

0 comments on commit 9b53f7d

Please sign in to comment.