yq は YAML を操作できるコマンドラインツールで、Kubernetes 用のマニフェストの確認やクラスタの状態確認に利用できます。 この記事では yq の基本的な使い方と Kubernetes 環境での応用方法を紹介します。 基本的な使い方 yq eval に続けて評価式を書くことで YAML の一部を表示したり編集したりすることができます。
yq は YAML を操作できるコマンドラインツールで、Kubernetes 用のマニフェストの確認やクラスタの状態確認に利用できます。 この記事では yq の基本的な使い方と Kubernetes 環境での応用方法を紹介します。 基本的な使い方 yq eval に続けて評価式を書くことで YAML の一部を表示したり編集したりすることができます。
試験環境であれば上記のような間違いも取り返しがつくのですが、 本番環境は大概デプロイ一発勝負であるが故に、ミスすると取り返しが付きません。 頑張ってチェックしても、人力をすり抜けるミスがありうるというのは非常に心臓に悪いです。 あらかじめ想定した型(スキーマ)がある以上、YAMLファイルもバリデーションすべきです。 YAMLのバリデーションに使える道具はあるか? YAMLのバリデーションというのは、そこまでメジャーな関心事ではないらしく、専用のメジャーなスキーマ技術がぱっと出てきません。 そこでいろいろ調べた結果、下記がとりあえず候補として上がりました。 JSON Schema 良い点 VS Code でサポートされている RedHat からリリースされているプラグインで可能です リアルタイムで補完と検証が効くので、かなり体験がいいです ツール、処理系、ノウハウが豊富 識者が多い スキーマ
タイトルの通り、Goで標準出力をフィルタしてよしなに色を付けるツール書きました。 irir モチベーションは「 go test に色を付けるツールを作った #golang 」と同じです。 ある標準出力に対して、なんらかの文字列を含んでいたらその文字列に色を付けたり、行全体に色を付けたいという要求はよくあることだと思います。今回は、そうした小さな色付けルールをYAMLで記述してフィルタを適用する感じのツールにしました。 READMEにある通りですが、以下の様なログファイルがあったとして、 $ cat example.log 2023/05/19 23:56:54 [info] GET /some/resource 200 0.001 2023/05/19 23:56:55 [warn] GET /some/resource 200 0.001 2023/05/19 23:56:56 [err
今年もRubyKaigiに協賛させていただきました! Flatt Security 執行役員CCO / プロフェッショナルサービス事業部長の @toyojuni です。先日沖縄県那覇市で開催されたRubyKaigi 2024の振り返りと皆様への感謝の気持ちを込めて本記事を執筆します。 昨年に引き続いて、Flatt SecurityはRubyKaigiにPlatinum Sponsorとして協賛し、ブースを出展させていただきました。ありがたいことに、3日間でのブース訪問の延べ人数は500人を超え、様々なRubyistの方との接点を持てたと感じています。 そんな今回のブース出展の軸と言える企画が「YAMLパース占い」でした。 Flat Securityは明日から始まる #RubyKaigi 2024に協賛させていただきます!ブースでは新企画「YAMLパース占い」を実施します🔮 与えられたYA
はじめまして。メルカリの Microservice Platform CI/CD とメルペイの Architect で Software Engineer Internship をしている riita10069 です。 この記事は、Merpay Tech Openness Month 2021 の3日目の記事です。 本記事では、私が Kubernetes1のコントローラー2を開発する上で使用している開発環境について紹介したいと思います。 コントローラーの実行環境についてまとまっていなかった方や、これからコントローラーを実装するけれど環境構築で悩んでいる方などの参考になれば嬉しいです。 Abstract Kubernetes のコントローラーを開発する場合に、動作確認をしたり、自動テストを作成するのには、実際にコントローラーを Kubernetes の環境上で動作させる必要があります。 具体
JavaScript Object Notation の略です。 RFC7158 と ECMA-404 1st edition では若干仕様の差異がありましたが、2017年12月に仕様の統一が行われ、RFC 8259, IETF STD 90, ECMA-404 2nd edition で再規定されました。 MIMEタイプは application/json。拡張子は .json。 JavaScript のデータ定義文をベースとした、簡易的なデータ定義言語です。 JavaScript だけではなく、Java, PHP, Ruby, Python など、様々な言語間のデータ交換、特に Ajax や REST API などで使用されています。 これまでは、共通データ定義言語として XML が利用されてきましたが、現在では、簡易的な JSON が利用されるケースが増えてきています。 子要素がひと
written by Ruud van Asseldonk published 11 January, 2023 For a data format, yaml is extremely complicated. It aims to be a human-friendly format, but in striving for that it introduces so much complexity, that I would argue it achieves the opposite result. Yaml is full of footguns and its friendliness is deceptive. In this post I want to demonstrate this through an example. This post is a rant, an
先日、携わっているサービスで一番大きいRailsアプリをRuby 3.2にアップデートし、YJITを有効化できました。 方針を検討した結果、今回はRails 6.1およびPsych 3系のままRuby 3.2にアップデートする戦略をとったため、その手順をまとめます。 先週にメインのサービスをRuby 3.2にしてYJITを有効にできました! 実際に速くなったし嬉しい大YJIT記念日だ🎉 https://t.co/Wkhc6fDfj9 — Hiroshi Shimoju (@shimoju_) July 19, 2023前提#今回のRailsアプリはサービスの機能がほぼすべて詰まっているモノリスで、歴史も8年と比較的長いです。 アップデート前のバージョンはRuby 3.0、Rails 6.1で、Psychは3系。 正攻法では、おおむね以下の手順でアップデートを進めていくことになります。 R
いずれの形式でも、簡単なデータを表す場合はそれほど違いがありません。同一のデータがそれぞれのフォーマットでどのように表現されるか、簡単な例を使用して見比べてみます。 TOMLでは以下のように簡潔に表現できます。 [app] app_name = "example" environment.NAME = "sandbox" environment.VERSION = "0.0.1" volumes = ["vol1", "vol2"] YAMLでは以下のようになります。このデータにおいてはシンプルで可読性も悪くありません。 しかし、YAMLはインデントを使用してデータ構造を表現することから、ネストが深くなってしまうことがあります。ネストが深くなると可読性が悪くなり、インデントがずれてパースエラーや意図しない階層構造で読み込まれてしまうことがあるので注意が必要です。 app: app_name
GoでCUEのバリデーション機能を利用しつつ、.cue/.json/.yaml形式の設定ファイルを読み込む 人間が読み書きする設定ファイルについて、2つのエントリーを紹介してきました。今回は第3段です。 一周回って、人間が読み書きする設定ファイルはJSONが良いと思った CUEを試して見る 前回のエントリーで、CUEはテキストファイルのフォーマットでありつつもJSON/YAMLと同等の表現力(階層が持てて、文字列や数値などを扱える)を持ち、なおかつCUEコマンドやライブラリでは.cue/.json/.yamlを同列に入力ファイルとして扱えるということを紹介しました。また、.cueファイルにスキーマを定義して、バリデーションが行えることも紹介しました。 今回は、Goのパッケージを利用して、.cue/.json/.yaml形式の設定ファイル読み込み機能をアプリケーションに組み込んでみます。本家
Visual Regression Test(以下VRT)をやろうと思うと画像をどこに保存するかを検討する必要がでてくるケースがある。 (web アプリケーションのVRTを前提とすると)多くの場合、テキスト形式である*.snapとは異なり、画像取得時のOSやfont、ブラウザのversionなどにより差分がでやすくなってしまう。そのため画像はCIなど環境を極力そろえた状態で取得し、S3などに上げVRT対象の画像を管理するケースがみられる。 今回はこのフロー・管理の簡略化を目指しactionsを作成・リリースした。 成果物 repositoryは以下。yamlに後述するstepを記述すれば使用できる。 セットアップ 最小の記述は以下となる。これで./images以下の画像に対してVRTを行ってくれる。VRTに必要な画像管理はactionsが受け持ち、PRごとにレポートをコメントする。 nam
JSON Schemas are available for the following {0} files: Auto completion In supported JSON editors like Visual Studio and Visual Studio Code, schema files can offer auto-completion and validation to make sure your JSON document is correct. See a list of editors, validators and other software supporting JSON schemas. Tooltips When a JSON editor supports schemas, tooltips can help inform the user abo
Helmの勉強のために、各サブコマンドで何ができるか調べました。 環境情報 EKS Workshopで使う、Cloud 9インスタンス上で検証しています。Linuxです。 Helmのバージョンは以下です。 $ helm version version.BuildInfo{Version:"v3.5.0", GitCommit:"32c22239423b3b4ba6706d450bd044baffdcf9e6", GitTreeState:"clean", GoVersion:"go1.15.6"} completion generate autocompletions script for the specified shell シェル自動補完のためのスクリプトを吐いてくれます。 各シェル用のサブコマンドがあります。 Available Commands: bash generate au
GitHub Actionsのワークフロー設定ファイルは、以前はHCL形式でしたが今はYAML形式になっています。 このエントリでは、GitHub Actions(setup-terraform)でTerraform plan/applyを自動化する方法を紹介します。 手っ取り早くworkflowファイルのサンプルだけ欲しいという方は下記をご覧ください。 GitHub - otoyo/github-actions: GitHub Actions samples 前提条件と注意点 クラウドリソースをすでにTerraformで管理している まだという方は下記を参考にTerraform管理にしてください。 既存のAWS環境を後からTerraformでコード化する | Developers.IO tfstateファイルをS3などリモートで管理している ローカルにある人は下記を参考に移行してください
お手伝いの yuki です。 今日は serde の話です。最近仕事で serde を使っていて「これはバグでは??」と思った挙動がありました。具体的には untagged というものなのですが、同僚に「これはバグではなく仕様」というコメントをもらいました。たしかにドキュメントを見てみると注意書き等書いてあり、そういえば serde をなんとなく使っていたなと思いました。というわけで今日は記事を書くことで serde の理解を深めるということをしたいと思います。 なお、この記事はドキュメント以上のことはあまり書かれないと思います。実務的にどう利用しているかという観点から、このドキュメントをもとに記事として再編集することを目指しているためです。serde のドキュメントは下記にあります。 serde.rs 目次 目次 まず、読み方 serde とは何か? 基本 基本的な使い方 まとめ まず、
Kubernetes コンテナ名を y にすると実行できなくて困った(YAML の Boolean の話)2020/2/29 k8s 環境Kubernetes 1.15 ]# kubectl version Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:13:54Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"15",
Source: PexelsMost data scientists spend the majority of their working hours in a notebook. As a result, most production machine learning platforms prioritize notebook support. If you try out a new production ML platform, chances are its onboarding tutorial will begin with a .ipynb file. When we built Cortex, our production machine learning platform, we spent a lot of time considering the correct
No offense to the creator of YAML, but: The fact that it became one of the de-facto standards for cloud tooling is an absolutely damning statement about the state of the industry.I get that XML is about as sexy as mainframes, and that a lot of folks here probably have PTSD from working with Java/Spring web apps, but YAML is about the worst of all worlds. Though I think the real problem is that rea
Go のフレームワークに求めるものこの場合、フレームワークに対して何を求めるでしょうか。 私は以下を重要視していました。 重要視したことドキュメントと実装の乖離をなくすことで、認識齟齬なく開発を行うこと なぜ? ドキュメントと実装のズレを解消するコストが高いため Web API 開発をする中で最も困ることは ドキュメントと実装がかけ離れること です。ドキュメントととのずれによる、コミュニケーションを極力減らしたいと考えました インターフェイスが頻繁に変わることが想定されたため データ定義の部分が固く決まっていなかったため、データに引きずられて API 仕様の変更も頻繁に起きるだろうと思いました インターフェイスのやり取りの物理的な距離が遠いため 同一の会社内だけでなく会社間をまたいだ開発も想定されたため、コミュニケーションコストがより高くなると想定しました フレームワーク比較ドキュメントと
decent looking diagrams for engineers
小ネタで恐縮です。docker-composeは便利なのですが、docker-compose.ymlの中でローカル変数的に値を手軽に使い回す方法を知りたくなりました。 version: "3.4" services: app: &app build: context: . dockerfile: ./.dockerdev/Dockerfile args: RUBY_VERSION: "2.7.0-slim-buster" PG_MAJOR: "12" NODE_MAJOR: "11" YARN_VERSION: "1.19.1" BUNDLER_VERSION: "2.0.2" image: enno_docker:1.0.0 tmpfs: - /tmp # (略) postgres: image: postgres:12 volumes: - .psqlrc:/root/.psqlrc:
Loading, please wait...
text0: 吾輩は猫である 名前はまだ無い text1: |- 吾輩は猫である 名前はまだ無い text2: >- 吾輩は猫である 名前はまだ無い text3: "\ 吾輩は猫である\ 名前はまだ無い" YAML.load_file('sample.yml') => { "text0"=>"吾輩は猫である 名前はまだ無い", "text1"=>"吾輩は猫である\n名前はまだ無い", "text2"=>"吾輩は猫である 名前はまだ無い", "text3"=>"吾輩は猫である名前はまだ無い" } 発端 Railsでの設定ファイルとして、Yaml形式がよく使われています。特にi18n用のファイルはよく長文を記述されます。しかし、長文を一行で書くことは保守上問題ですし、改行を入れて複数行にすると、変な改行やスペースが残されますし、今まではやむをえず、読み取り側で改行を取り除くロジックを組みました
タイトルは釣りっぽいんですが Psych v4.0.0 で『 Psych.load が Psych.safe_load を使用するようになった』事で普段利用している YAML.load や YAML.load_file が今後非互換になってしまう、という話です。 この変更により今まで読み込むことができていた YAML ファイルが今後読み込みエラーになる可能性があります。 先にまとめだけ書いておくと Psych v4.0.0 で YAML.load が非互換になる なので既存の YAML データが読み込めずにエラーになる可能性がある もし急に YAML データが読み込めなくなったら Psych のバージョンを確認しよう 回避する場合は YAML.unsafe_load などが利用できる また、この記事の内容は記事を書いた当時の話なので今後変わっているかもしれないので注意してください。 NOT
Don't repeat yourself Struggling with configuration drift? Create a single source of truth you can reference everywhere. "Configuration drift occurs when a standardized group of IT resources, be they virtual servers, standard router configurations in VNF deployments, or any other deployment group that is built from a standard template, diverge in configuration over time. … The Infrastructure as Co
0. はじめに こんにちは。都内でエンジニアをしている、@gkzvoiceです。本記事は、jsonをいいかんじに出力したり、加工できるjqコマンドのラッパーのyqコマンドの使い方備忘録です。 1. yqコマンドとは kislyuk/yq: Command-line YAML and XML processor - jq wrapper for YAML/XML documents YAML/XMLを操作する際に使うjqコマンドのラッパー Yaml/XMLをgrepみたいに抽出 いいかんじに整形もしてくれる なので、数千行のmanifestやplaybookに対してgrepしたり、Gitlab Runner上でmanifestの一部をsedしていたことをyqコマンドでシュッとすることもできます。いいことずくめのyqコマンドなのですが、いざ触ってみたら、以下のような問題点を感じました。 2.
はじめに JSONにコメント書きたいというのは全人類の共通の悩みです。 Terraformでインフラコードを管理するメリットの1つは、設定値にコメントが書けることですが、設定値がJSONを受け付けるようなリソースの場合は、なぜその設定値になっているのか、JSON内部の各パラメータにコメントを書きたすぎる問題が発生します。 たとえば、AWSのECSタスク定義とか複雑めなJSONで、環境変数とかパフォーマンスチューニング系のパラメータがなぜこの値になってるのかとか、JSONの中にコメント書きたいじゃないですか。 この記事ではTerraformでJSONにコメントを書きたいみんなのために、いくつかの方法を紹介します。 環境 手元の環境は以下のとおりです。
自己紹介 名前:osyo Twitter : @pink_bangbi github : osyo-manga ブログ : Secret Garden(Instrumental) Rails エンジニア 好きな Ruby の機能は Refinements Ruby 3.1 で気になる機能は Hash のショートハンドと debug.gem RubyKaigi Takeout 2021 Use Macro all the time ~ マクロを使いまくろ ~ Advent Calendar やってるよ! Ruby の TracePoint を使ってメソッド呼び出しをトレースしよう 一人 bugs.ruby Advent Calendar https://twitter.com/pink_bangbi https://github.com/osyo-manga http://secret-ga
以下の記事を読んだ。 wp.jmuk.org この記事の要点をかいつまんで話すと、以下の通りになる: JSONの代替として使われているYAMLはオーバースペックではないか キーのスキーマが不安定だったりする 求めているものは、コメントが書けるJSONくらいのものなのではないか いま使われているからそれを使うということになっているのではないか とりあえず各言語にライブラリがあるという点ではYAMLが利用されがち だいたい同意する。また、個人的にYAMLは好きではなかったので、納得いったという側面もある。 予想外の振舞いが多いというのは、オーバースペックをほのめかす分かりやすい兆候だと考えている。 いくつか考えたことをまとめておく。 JSONの問題 そもそもYAMLやJSONが本当に必要か シリアライズフォーマットの対立軸 Windymeltがちょっとした設定ファイルや構造化された入力を与える
はじめに こんにちは、イノベーションセンター テクノロジー部門の小倉 (@Mahito) です。 普段は Engineer Empowerment Project のリーダーとして、エンジニアのはたらく環境を良くする取り組みや NTT Tech Conference や勉強会などのエンジニアが楽しく働くための取り組みをしています。 今回は社内で行った TechNight というイベントで発表した YAML の文法についての話を記事にしたものです。 もともとの発表は、YAML の記法について調べてるうちに「YAML こんなこと出来るのか」となったのでまとめたものでした。 YAML とは 公式サイト (The official YAML Web Site) ではこう書かれています。 YAML is a human friendly data serialization standard for
ウェブページからフィードを生成するweneedfeedというツールをつくった。 使い方 このツールはRubygemとして実装されているので、Rubyがインストールされている環境が必要になる。ツール自体はgem installでインストールできる。 gem install weneedfeed 利用者には、URLとCSSセレクタをweneedfeed.ymlというYAML形式のファイルに書いてもらうことになる。例えばこのウェブサイト、r7kamura.comの新着記事のためのRSSフィードを生成しようとすると、こんな内容になる。 pages: id: r7kamuracom title: r7kamura.com url: https://r7kamura.com/ item_selector: li item_description_selector: p:nth-child(3) ite
■ はじめに Ansible のターゲットホストの情報を定義するインベントリファイルは、INI 形式の他にも YAML 形式でも定義できす。 この記事では、2つの例をとって ini と YAML を比較しながら YAML でのインベントリファイルの書き方を説明します。 動作確認環境 Ansible 2.7.8, 2.3.0 ■ 簡単な例 はずは簡単な例です。1つのグループに2つのホストが所属し、ホスト個別の変数、グループ共通の変数を定義します。 ini の場合 ini で書く場合は以下のような例です。 [junos] junos01 ansible_host=172.16.1.1 junos02 ansible_host=172.16.1.2 [junos:vars] ansible_network_os=junos ansible_connection=netconf ansible-i
幽霊の 正体見たり 枯れ尾花 (幽霊のように不気味に見えたものは、よくよく見ると枯れたススキの穂であった) Obsidianの機能で最も幽霊的な存在とも言えるのが「YAML Front Matter (ヤムルフロントマター)」です。 初めて出会う方には途方もなく難しそうに映るかもしれません。確かにYAMLもフロントマターも、完全に理解しようとするとかなりの時間を要します。 (「YAML」でググればプログラミング関連の資料がわんさか掘り出されるので、興味のある方は調べてみてください) しかしObsidianで便利に使いたいだけなら、その全てを理解する必要などありません。なんなら1つ予言しておきましょう。 あなたはこの記事を読み終える頃、「フロントマターなんて簡単だ」と思っている。 さあ……そろそろ幽霊狩りの時間です。 YAMLフロントマターについてYAMLフロントマターとは、 YAMLという
こんにちは、AWS事業本部コンサルティング部に所属している今泉(@bun76235104)です。 みなさんはCUE言語(CUE lang)を使っていますか? CUEはGo言語との相性も良く、KubernetesのYAMLファイルをCUEに置き換えたりすることもでき、話題のCIツールのDaggerでも利用されています。 筆者は「JSON のすごいやつ」程度の認識しかなかったのですが、学んでみたいツールにCUEが利用されているため、今回公式のチュートリアルを通してCUEに入門してみました!! なお、本記事では練習用のデータとして、筆者が大好きなお笑い芸人の名前などが出てきますが、特に意味はございませんのでスルーしていただけますと幸いです。 そもそもCUEとはなんなのか 公式サイトには以下のように記載されています。 CUE is an open-source data validation la
a lightweight and portable command-line YAML processor. yq uses jq like syntax but works with yaml files as well as json. It doesn't yet support everything jq does - but it does support the most common operations and functions, and more is being added continuously. yq is written in go - so you can download a dependency free binary for your platform and you are good to go! If you prefer there are a
yamlやJsonのDSLが辛い 昨今、kubernetesを初めとして、yamlやJsonでconfigを書く機会が多くなっています。 独自記法を覚えるのがつらい。 私「ここは文字列?数値?省略したらどうなる?」 また、台帳管理をyamlで行うケースもあるかと思いますが、yamlの型管理がしたい。 私「文字列のみってreadmeに書いたのに、数値が入ってる・・・」 CUEはyamlやJson上のデータに対して、型を定義し、そのチェックをしてくれるツールです。 この記事を読むと得られること CUEに関して何となく分かる CUEを使ってyamlの型チェックを行える CUEとは CUEとは CUE is an open source language, with a rich set APIs and tooling, for defining, generating, and validat
この記事は Calendar for Legalscape アドベントカレンダー 2021 の 22日目の記事で、前後編のうちの後編です。前編は「 openapi-generator フレンドリーな OpenAPI ドキュメントを書く 」というタイトルで 12/17 に公開されました 前回の記事ではフロントエンド側でどうやって自動生成コードに置き換えていくかを紹介しました。今回は openapi.yaml 上でどのような定義を書いたらフロントエンドで扱いやすいのかを紹介します 調査時に READYFOR さんのブログ を参考にさせていただきました。ライブラリが違うので一部違う箇所もありますが、共通する部分は多いのでぜひ併せて読んでみてください 生成されるコードの解説 openapi-generator の typescript-axios を利用してコード生成すると、大まかに以下の 3つの
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く