MinikubeでIngressの作成に失敗する

Error from server (InternalError): error when creating "keycloak-ingrers.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1beta1/ingresses?timeout=10s": x509: certificate signed by unknown authority

対策

kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission

APIからRealmを追加

Env Keycloak: 11.0.3

Get token

def get_token():
    url = f"{BASE_URL}/auth/realms/master/protocol/openid-connect/token"

    realm = "your-realm"
    username = "your-admin-user-name"
    password = "your-admin-password"
    client_id = "client-id"
    payload=f'client_secret={realm}&username={username}&password={password}&grant_type=password&client_id={client_id}'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    return response.json()['access_token']

Create realm

def create_new_realm(id, realm, token):
    payload = { "id": id, "realm" : realm, "enabled" : True }
    url = f"{BASE_URL}/auth/admin/realms"
    headers = {
        'Authorization': 'Bearer ' + token,
        'Content-Type': 'application/json'
    }
    print(payload)
    response = requests.request("POST", url, headers=headers, data= json.dumps( payload))
    print(response)

Windows terminal起動時のWSLのパス変更

windows TermailでWSLを起動時にCドライブのユーザー直下になるのが嫌なので変更しました setting.jsonに以下を追加

 {
      "guid": "",
       "name": "Ubuntu-20.04",
        "startingDirectory": "//wsl$/Ubuntu-20.04/home/{username}",
        "source": "Windows.Terminal.Wsl"
}

WSL2にIntellijをインストールする

WSL2にIntellijをインストールする Ubuntu20.04をインストールし、WSL2にしておく

sudo apt update

X windowをインストール
sudo apt install xfce4 (LightDMを選択)

windows にVcXSrvをインストール VcXSrvの設定は以下を参考

qiita.com

.bashrcに以下を追記
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

bashrcを再読み込み source ~/.bashrc

JetBrains tool boxをDL

インストール
sudo tar -xzf jetbrains-toolbox-*.tar.gz -C /usr/local/bin --strip-components 1

toolboxを起動
jetbrains-toolbox

azreu storage V12を使う方法

const { BlobServiceClient } = require('@azure/storage-blob');


const ConnectionString = "";

async function main() {
    console.log('Azure Blob storage v12 - JavaScript quickstart sample');
    // Quick start code goes here
    const list = await listBlobs("blob-name");
    list.forEach(element => {
        console.log(element);
    });
}


async function download(containerName: string, blobName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const blockBlobClient = containerClient.getBlockBlobClient(blobName);
    const blobDownloadResponse = await blockBlobClient.download(0);
    return blobDownloadResponse.readableStreamBody;
}

async function upload(containerName: string, blobName: string, data: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const blockBlobClient = containerClient.getBlockBlobClient(blobName);
    const uploadBlobResponse = await blockBlobClient.upload(data, data.length);
    return uploadBlobResponse.requestId;
}

async function createContainers(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    try {
        const createContainersResponse = await containerClient.create();
        return createContainersResponse.requestId;
    } catch (e) {
        console.log(e);
    }
}

async function deleteContainers(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    return await containerClient.delete();
}

async function listBlobs(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const blobs = [];
    for await (const blob of containerClient.listBlobsFlat()) {
      blobs.push(blob.name);
    }
    return blobs;
}

async function doesContainerExist(containerName: string) {
    const blobServiceClient = BlobServiceClient.fromConnectionString(ConnectionString);
    const containerClient = blobServiceClient.getContainerClient(containerName);
    return containerClient.exists();
}

main().then(() => console.log('Done')).catch((ex) => console.log(ex.message));