diff --git a/.gitignore b/.gitignore index a7cea66..2981c53 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ public .DS_Store +resources + diff --git a/.gitmodules b/.gitmodules index 313a066..aad5512 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,3 @@ -[submodule "themes/cocoa"] - path = themes/cocoa - url = https://github.com/nmasse-itix/cocoa-hugo-theme.git - branch = nmasse-itix -[submodule "themes/diary"] - path = themes/diary - url = https://github.com/nmasse-itix/hugo-theme-diary.git - branch = www.itix.fr +[submodule "themes/itix"] + path = themes/itix + url = https://github.com/nmasse-itix/hugo-theme-itix.git diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..9d4ceea --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,18 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +description: "" +opensource: +- project1 +topics: +- topic1 +resources: +#- src: '*.yaml' +#- src: '*.png' +--- + +Headline. + + + +Main content here. diff --git a/config.toml b/config.toml deleted file mode 100644 index 92b661c..0000000 --- a/config.toml +++ /dev/null @@ -1,71 +0,0 @@ -baseURL = "https://www.itix.fr/" -languageCode = "en-us" -title = "Nicolas Massé" -author = "Nicolas Massé" -theme = "diary" -pygmentsUseClasses = true -pygmentsCodefences = true -enableRobotsTXT = true - -[taxonomies] -opensource = "opensource" -topic = "topics" -tags = "tags" - -[params] -include_rss = true -latestpostscount = 10 -i18n_flags = true -author = "Nicolas Massé" -description = "Nicolas Massé's blog" -github = "//github.com/nmasse-itix" -px500 = "//500px.com/nmasse" -linkedin = "//linkedin.com/in/nicolasmasse" -#selfintro = "TODO intro" -twitter = "//twitter.com/nmasse_itix" -gravatar = "006617bcd9aae1a019e1f923c8bd69e0" -#faviconfile = "images/favicon.ico" - -[menu] - -[[menu.main]] -name = "Home" -weight = 10 -identifier = "home" -url = "/" - -[[menu.main]] -name = "Biography" -weight = 20 -identifier = "biography" -url = "/biography/" - -[[menu.main]] -name = "Blog" -weight = 30 -identifier = "blog" -url = "/blog/" - -[[menu.main]] -name = "Open Source" -weight = 35 -identifier = "opensource" -url = "/opensource/" - -[[menu.main]] -name = "Speaking" -weight = 40 -identifier = "speaking" -url = "/speaking/" - -[[menu.main]] -name = "Writing" -weight = 50 -identifier = "writing" -url = "/writing/" - -[[menu.main]] -name = "Contact" -weight = 60 -identifier = "contact" -url = "/contact/" diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..a6f4730 --- /dev/null +++ b/config.yaml @@ -0,0 +1,74 @@ +baseURL: "/" +title: "Nicolas Massé" +author: "Nicolas Massé" +theme: "itix" +# pygmentsUseClasses implies a style sheet that can be generated as follow: +# hugo gen chromastyles --style=borland > static/css/chroma.css +pygmentsUseClasses: true +pygmentsCodefences: true +enableRobotsTXT: true + +defaultContentLanguage: "en" +languages: + en: + weight: 1 + languageName: English + contentDir: content/english + menu: + main: + - name: "Articles" + weight: 10 + url: "/blog/" + - name: "Open Source" + weight: 20 + url: "/opensource/" + - name: "Expertise" + weight: 30 + url: "/topics/" + - name: "Speaking" + weight: 40 + url: "/speaking/" + - name: "Writing" + weight: 50 + url: "/writing/" + - name: "Contact" + weight: 60 + url: "/contact/" + - name: "Resume" + weight: 70 + url: "https://www.linkedin.com/in/nicolasmasse/" + fr: + weight: 2 + languageName: Français + contentDir: content/french + menu: + main: + - name: "Articles" + weight: 10 + url: "/fr/blog/" + - name: "Open Source" + weight: 20 + url: "/fr/opensource/" + - name: "Expertise" + weight: 30 + url: "/fr/topics/" + - name: "Conférences" + weight: 40 + url: "/fr/speaking/" + - name: "Publications" + weight: 50 + url: "/fr/writing/" + - name: "Me contacter" + weight: 60 + url: "/fr/contact/" + - name: "CV" + weight: 70 + url: "https://www.linkedin.com/in/nicolasmasse/" + +taxonomies: + opensource: "opensource" + topic: "topics" + tags: "tags" + +params: + diff --git a/content/english/_index.md b/content/english/_index.md new file mode 100644 index 0000000..73bfafa --- /dev/null +++ b/content/english/_index.md @@ -0,0 +1,11 @@ +--- +title: "Nicolas Massé" +--- + +I am Nicolas Massé, you will find me on social networks under the nickname "nmasse-itix". +Initially developer, I now work as pre-sales consultant in the fields of [API Management]({{}}), [Single Sign On]({{}}) and [Containers]({{}}). + +I mainly work with [Open Source]({{}}) technologies such as [Keycloak]({{}}), [3scale]({{}}) or [OpenShift]({{}}). +I share my [expertise]({{}}) and interests on this site, as a guest [on other websites]({{}}) and I occasionally give [conferences]({{}}). + +Please read [my blog]({{}}) or [learn more about me](https://www.linkedin.com/in/nicolasmasse/). diff --git a/content/blog/3scale-toolbox-anonymous-policy.md b/content/english/blog/3scale-toolbox-anonymous-policy.md similarity index 99% rename from content/blog/3scale-toolbox-anonymous-policy.md rename to content/english/blog/3scale-toolbox-anonymous-policy.md index 467f341..3a7e7eb 100644 --- a/content/blog/3scale-toolbox-anonymous-policy.md +++ b/content/english/blog/3scale-toolbox-anonymous-policy.md @@ -1,8 +1,10 @@ --- title: "What is this 'Anonymous' policy configured by the 3scale toolbox?" date: 2019-11-14T00:00:00+02:00 -opensource: +opensource: - 3scale +topics: +- API Management --- In this article on the Red Hat Developer blog, I explained [how to deploy an API from the CLI, using the 3scale toolbox](https://developers.redhat.com/blog/2019/07/29/3scale-toolbox-deploy-an-api-from-the-cli/). @@ -10,6 +12,8 @@ If you tried this approach by yourself you may end up, *sooner or later*, with a What is this policy and why is it there? Let's dig in! + + In a nutshell, the *Anonymous* policy instruct the *APIcast* gateway to expose an API **without any security mechanism**. Given how we stress out the importance of security in our very fragile IT systems, this calls out the following question: why was it there in the first place? diff --git a/content/blog/3scale-toolbox-url-rewriting-policy.md b/content/english/blog/3scale-toolbox-url-rewriting-policy.md similarity index 98% rename from content/blog/3scale-toolbox-url-rewriting-policy.md rename to content/english/blog/3scale-toolbox-url-rewriting-policy.md index 615b1a7..b219b42 100644 --- a/content/blog/3scale-toolbox-url-rewriting-policy.md +++ b/content/english/blog/3scale-toolbox-url-rewriting-policy.md @@ -3,11 +3,15 @@ title: "What is this 'URL Rewriting' policy configured by the 3scale toolbox?" date: 2019-11-14T00:00:00+02:00 opensource: - 3scale +topics: +- API Management --- In this article on the Red Hat Developer blog, I explained [how to deploy an API from a Jenkins Pipeline, using the 3scale toolbox](https://developers.redhat.com/blog/2019/07/30/deploy-your-api-from-a-jenkins-pipeline/). If you tried this approach by yourself you may have noticed that in some cases, the configured service includes the *URL Rewriting* policy in its *Policy Chain*. + + The *URL Rewriting* policy can be used for a variety of use cases but, in a nutshell, the *URL Rewriting* policy is used by the toolbox to change the *Base Path* of an API. For instance, if your actual API implementation is live at **/camel/my-route** but you wish to expose it on **/api/v1**, you can instruct the 3scale toolbox to configure the *URL Rewriting* policy for you by specifying the `--override-private-basepath` and `--override-public-basepath` options. diff --git a/content/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments.md b/content/english/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/index.md similarity index 97% rename from content/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments.md rename to content/english/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/index.md index 1539790..6a64690 100644 --- a/content/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments.md +++ b/content/english/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/index.md @@ -5,6 +5,10 @@ opensource: - Ansible - OpenShift - Skopeo +topics: +- Containers +resources: +- src: '*.yaml' --- Some customers, especially large banks, have very tight security requirements. @@ -143,7 +147,7 @@ Finally, skopeo is called to download each image to */tmp/oci_registry*. with_items: '{{ images }}' ``` -The complete playbook [is available here](pull.yaml) and can be run as follow. +The complete playbook [is available here]({{< attachedFileLink src="pull.yaml" >}}) and can be run as follow. ```sh ansible-playbook pull.yaml -e token=$TOKEN diff --git a/static/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/pull.yaml b/content/english/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/pull.yaml similarity index 100% rename from static/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/pull.yaml rename to content/english/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/pull.yaml diff --git a/content/blog/ansible-add-prefix-suffix-to-list.md b/content/english/blog/ansible-add-prefix-suffix-to-list.md similarity index 96% rename from content/blog/ansible-add-prefix-suffix-to-list.md rename to content/english/blog/ansible-add-prefix-suffix-to-list.md index 52c007c..8e3e6cb 100644 --- a/content/blog/ansible-add-prefix-suffix-to-list.md +++ b/content/english/blog/ansible-add-prefix-suffix-to-list.md @@ -3,10 +3,14 @@ title: "Ansible: Add a prefix or suffix to all items of a list" date: 2019-11-18T00:00:00+02:00 opensource: - Ansible +topics: +- IT Automation --- Recently, in [one of my Ansible playbooks](../airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments) I had to prefix all items of a list with a chosen string. + + Namely, from the following list: ```python diff --git a/content/blog/build-your-own-distribution-on-fedora-coreos.md b/content/english/blog/build-your-own-distribution-on-fedora-coreos.md similarity index 100% rename from content/blog/build-your-own-distribution-on-fedora-coreos.md rename to content/english/blog/build-your-own-distribution-on-fedora-coreos.md diff --git a/content/blog/check-ansible-version-number-playbook.md b/content/english/blog/check-ansible-version-number-playbook.md similarity index 95% rename from content/blog/check-ansible-version-number-playbook.md rename to content/english/blog/check-ansible-version-number-playbook.md index d8f25f5..e557447 100644 --- a/content/blog/check-ansible-version-number-playbook.md +++ b/content/english/blog/check-ansible-version-number-playbook.md @@ -3,12 +3,16 @@ title: "Check the Ansible version number in a playbook" date: 2019-11-18T00:00:00+02:00 opensource: - Ansible +topics: +- IT Automation --- My Ansible playbooks sometimes use features that are available only in a very recent versions of Ansible. To prevent unecessary troubles to the team mates that will execute them, I like to add a task at the very beginning of my playbooks to check the Ansible version number and abort if the requirements are not met. + + ```yaml - name: Verify that Ansible version is >= 2.4.6 assert: diff --git a/static/blog/cleanup-playbook-3scale/cleanup.yaml b/content/english/blog/cleanup-playbook-3scale/cleanup.yaml similarity index 100% rename from static/blog/cleanup-playbook-3scale/cleanup.yaml rename to content/english/blog/cleanup-playbook-3scale/cleanup.yaml diff --git a/content/blog/cleanup-playbook-3scale.md b/content/english/blog/cleanup-playbook-3scale/index.md similarity index 94% rename from content/blog/cleanup-playbook-3scale.md rename to content/english/blog/cleanup-playbook-3scale/index.md index aa9012b..1738dad 100644 --- a/content/blog/cleanup-playbook-3scale.md +++ b/content/english/blog/cleanup-playbook-3scale/index.md @@ -1,8 +1,14 @@ --- title: "A cleanup playbook for 3scale" date: 2020-04-28T00:00:00+02:00 -opensource: +opensource: - 3scale +- Ansible +topics: +- API Management +- IT Automation +resources: +- src: '*.yaml' --- If you are running integration tests embedding 3scale or are doing a lot of 3scale demos, you might sooner or later **have plenty of services declared in the 3scale Admin console**, which could reveal difficult to work with. @@ -10,6 +16,8 @@ And with the new feature named *API-as-a-Product*, there are now **Backends and This article explains how to cleanup a 3scale tenant using Ansible. + + ## Pre-requisites Make sure Ansible is installed locally and is a fairly recent version. @@ -53,7 +61,7 @@ export THREESCALE_TOKEN="$(oc get secret system-seed -o go-template --template=' Fetch the cleanup playbook. ```sh -curl -Lo cleanup.yaml {{< baseurl >}}blog/cleanup-playbook-3scale/cleanup.yaml +curl -Lo cleanup.yaml {{< attachedFileLink src="cleanup.yaml" >}} ``` ## Cleanup 3scale diff --git a/content/blog/cli-world-clock.md b/content/english/blog/cli-world-clock.md similarity index 98% rename from content/blog/cli-world-clock.md rename to content/english/blog/cli-world-clock.md index f448d85..e633e3c 100644 --- a/content/blog/cli-world-clock.md +++ b/content/english/blog/cli-world-clock.md @@ -10,6 +10,8 @@ requires me to leave my terminal. Let's meet the CLI World clock! + + ```sh function t() { for tz in Europe/Paris Europe/Dublin US/Eastern US/Central US/Pacific; do diff --git a/content/blog/configure-redhat-sso-3scale-cli.md b/content/english/blog/configure-redhat-sso-3scale-cli/index.md similarity index 95% rename from content/blog/configure-redhat-sso-3scale-cli.md rename to content/english/blog/configure-redhat-sso-3scale-cli/index.md index d0ba479..8b0c3e9 100644 --- a/content/blog/configure-redhat-sso-3scale-cli.md +++ b/content/english/blog/configure-redhat-sso-3scale-cli/index.md @@ -3,13 +3,19 @@ title: "Configure Red Hat SSO for 3scale using the CLI!" date: 2020-04-08T00:00:00+02:00 opensource: - 3scale -- keycloak +- Keycloak +topics: +- OpenID Connect +resources: +- src: '*.png' --- [3scale API Management](https://3scale.github.io/) can be used in conjunction with [Red Hat SSO](https://access.redhat.com/products/red-hat-single-sign-on) / [Keycloak](https://www.keycloak.org/) to secure APIs managed by 3scale using the OpenID Connect protocol. The [official documentation](https://access.redhat.com/documentation/en-us/red_hat_3scale_api_management/2.8/html/administering_the_api_gateway/openid-connect#configure_red_hat_single_sign_on) describes the steps to configure Red Hat SSO / Keycloak but it uses the Graphical User Interface, which can be tedious if you have multiple environments to configure. Let's configure Red Hat SSO for 3scale using the CLI! + + As a pre-requisite, install [jq](https://stedolan.github.io/jq/download/). Fetch the hostname, login and password of your Red Hat SSO instance, from your OpenShift environment. @@ -92,7 +98,7 @@ You can use the following URL for the **OpenID Connect Issuer** (replace $SSO_HO https://zync:s3cr3t@$SSO_HOSTNAME/auth/realms/3scale ``` -![openid-connect-issuer](openid-connect-issuer.png) +{{< figure src="openid-connect-issuer.png" title="OpenID Connect Issuer settings in the 3scale Admin Portal." >}} Or when [deploying an API in 3scale with the 3scale toolbox](https://developers.redhat.com/blog/2019/07/29/3scale-toolbox-deploy-an-api-from-the-cli/), you can use: diff --git a/static/blog/configure-redhat-sso-3scale-cli/openid-connect-issuer.png b/content/english/blog/configure-redhat-sso-3scale-cli/openid-connect-issuer.png similarity index 100% rename from static/blog/configure-redhat-sso-3scale-cli/openid-connect-issuer.png rename to content/english/blog/configure-redhat-sso-3scale-cli/openid-connect-issuer.png diff --git a/content/blog/configure-truststore-apicurio-studio.md b/content/english/blog/configure-truststore-apicurio-studio.md similarity index 98% rename from content/blog/configure-truststore-apicurio-studio.md rename to content/english/blog/configure-truststore-apicurio-studio.md index 69b97ff..5f9d945 100644 --- a/content/blog/configure-truststore-apicurio-studio.md +++ b/content/english/blog/configure-truststore-apicurio-studio.md @@ -4,6 +4,8 @@ date: 2019-10-25T00:00:00+02:00 opensource: - Apicurio - Microcks +topics: +- API Management --- [Microcks](http://microcks.github.io) and [Apicurio](https://www.apicur.io/) are nice Open Source projects that can even talk to each other to deliver greater value than the sum of their parts. @@ -11,6 +13,8 @@ opensource: Unfortunately, sometimes TLS certificates can get in the way of proper communication between the two projects. This post explains how to configure the trust store in Apicurio to overcome TLS communication issues between Apicurio and Microcks. + + Start by gathering the CA certificates used in your company. There can be several ones. You can then create a trust store by running this command for each CA certificate to import: diff --git a/content/blog/decode-kubernetes-secret-base64.md b/content/english/blog/decode-kubernetes-secret-base64.md similarity index 97% rename from content/blog/decode-kubernetes-secret-base64.md rename to content/english/blog/decode-kubernetes-secret-base64.md index 4c22ad5..5d86d75 100644 --- a/content/blog/decode-kubernetes-secret-base64.md +++ b/content/english/blog/decode-kubernetes-secret-base64.md @@ -3,6 +3,8 @@ title: "One-liner to decode a Kubernetes secret (base64 encoded)" date: 2019-06-07T00:00:00+02:00 opensource: - OpenShift +topics: +- Containers --- Creating a Kubernetes secret from a value is easy: diff --git a/content/blog/deploying-invidious-openshift.md b/content/english/blog/deploying-invidious-openshift.md similarity index 99% rename from content/blog/deploying-invidious-openshift.md rename to content/english/blog/deploying-invidious-openshift.md index c904166..09c002c 100644 --- a/content/blog/deploying-invidious-openshift.md +++ b/content/english/blog/deploying-invidious-openshift.md @@ -4,12 +4,16 @@ date: 2019-11-16T00:00:00+02:00 opensource: - OpenShift - Invidious +topics: +- Containers --- [Invidious](https://github.com/omarroth/invidious) is an alternative frontend to YouTube that is slimmer, faster and at the same time offer more features than YouTube itself. And even more important: it's Open Source! There is a hosted instance at [invidio.us](https://invidio.us/) if you want to give it a try. But, wouldn't it be cooler to host your own instance on your OpenShift cluster? Let's do it! + + Create a new project. ```sh diff --git a/content/blog/deploying-miniflux-openshift.md b/content/english/blog/deploying-miniflux-openshift.md similarity index 98% rename from content/blog/deploying-miniflux-openshift.md rename to content/english/blog/deploying-miniflux-openshift.md index c0f31a6..6883c10 100644 --- a/content/blog/deploying-miniflux-openshift.md +++ b/content/english/blog/deploying-miniflux-openshift.md @@ -4,10 +4,14 @@ date: 2019-11-17T00:00:00+02:00 opensource: - OpenShift - Miniflux +topics: +- Containers --- [Miniflux](https://miniflux.app) is a minimalist, open source and opinionated RSS feed reader. There is a [hosted instance](https://miniflux.app/hosting.html) available at a fair price point but wouldn't it be cooler to host your own instance on your OpenShift cluster? Let's do it! + + Create a new project. ```sh diff --git a/content/blog/enable-global-policies-apicast.md b/content/english/blog/enable-global-policies-apicast.md similarity index 98% rename from content/blog/enable-global-policies-apicast.md rename to content/english/blog/enable-global-policies-apicast.md index af7a110..9615498 100644 --- a/content/blog/enable-global-policies-apicast.md +++ b/content/english/blog/enable-global-policies-apicast.md @@ -3,6 +3,8 @@ title: "Enable global policies on Apicast 3.6" date: 2019-09-10T00:00:00+02:00 opensource: - 3scale +topics: +- API Management --- Recent versions of Apicast have a pluggable policy mechanism to apply different treatments to each exposed API. @@ -10,6 +12,9 @@ This is very powerful since each service receives its specific configuration. However, if the same treatment has to be applied to every service exposed, it becomes an administration overhead. Hopefully, Apicast has the concept of *Global Policies* that applies to every service exposed by itself. + + + An example of a widespread policy, especially during demos, is the CORS policy to allow the API Developer Portal to query the API Gateway directly. To configure the *Global Policy Chain*, you will have to provide a custom *Environment file*. diff --git a/content/blog/feed-url-drupal-wordpress-wix-youtube.md b/content/english/blog/feed-url-drupal-wordpress-wix-youtube.md similarity index 98% rename from content/blog/feed-url-drupal-wordpress-wix-youtube.md rename to content/english/blog/feed-url-drupal-wordpress-wix-youtube.md index 88c9c24..9c19ab8 100644 --- a/content/blog/feed-url-drupal-wordpress-wix-youtube.md +++ b/content/english/blog/feed-url-drupal-wordpress-wix-youtube.md @@ -7,6 +7,8 @@ If like me you are using [an RSS reader](../deploying-miniflux-openshift/) to st But since most website are based on commonly found CMS, it is highly probable the RSS feeds are there, just not advertised. + + Here are the URL patterns for the most common CMS on the market: - **Wordpress**: `/feed/` or `/?feed=rss2` diff --git a/content/blog/install-miniflux-raspberry-pi.md b/content/english/blog/install-miniflux-raspberry-pi.md similarity index 99% rename from content/blog/install-miniflux-raspberry-pi.md rename to content/english/blog/install-miniflux-raspberry-pi.md index 6dd5017..7912ad6 100644 --- a/content/blog/install-miniflux-raspberry-pi.md +++ b/content/english/blog/install-miniflux-raspberry-pi.md @@ -3,12 +3,16 @@ title: "Install Miniflux on your Raspberry PI" date: 2020-04-08T00:00:00+02:00 opensource: - OpenWRT +topics: +- Embedded Systems --- In the article "[Nginx with TLS on OpenWRT](../nginx-with-tls-on-openwrt/)", I explained how to install Nginx with TLS support on a Raspberry PI. But without an application to protect, Nginx is quite useless. This article explains how to install [Miniflux](https://miniflux.app/) (a lightweight RSS reader) on your Raspberry PI and how to host it as an Nginx virtual host. + + Miniflux is a web application written in Go and backed by a PostgreSQL database. So we will need to install PostgreSQL, install miniflux and setup Nginx. The rest of this article assumes you [installed OpenWRT on your Raspberry](../install-openwrt-raspberry-pi/), but it should be applicable to any Linux distribution with minimal changes. ## Install PostgreSQL diff --git a/content/blog/install-openwrt-raspberry-pi.md b/content/english/blog/install-openwrt-raspberry-pi/index.md similarity index 98% rename from content/blog/install-openwrt-raspberry-pi.md rename to content/english/blog/install-openwrt-raspberry-pi/index.md index 3c456c8..3882e5c 100644 --- a/content/blog/install-openwrt-raspberry-pi.md +++ b/content/english/blog/install-openwrt-raspberry-pi/index.md @@ -3,12 +3,18 @@ title: "Install OpenWRT on your Raspberry PI" date: 2019-12-19T00:00:00+02:00 opensource: - OpenWRT +topics: +- Embedded Systems +resources: +- src: '*.jpeg' --- [OpenWRT](https://openwrt.org/) is a Linux distribution for embedded systems. It made design choices that take it apart from the usual Linux distributions: musl libc instead of the usual glibc, busybox instead of coreutils, ash instead of bash, etc. As a result, the system is very light and blazing fast! + + Continue reading to know how to **install OpenWRT on your Raspberry PI**. ## Install OpenWRT @@ -66,7 +72,7 @@ screen /dev/ttyUSB0 115200 You then need to connect the VIN, GND, TXD and RXD wires to the correct GPIO pins of your Raspberry PI. -![GPIO UART pins](uart-pins.jpeg) +{{< figure src="uart-pins.jpeg" title="The UART Pins of the Raspberry PI 3" >}} Power-on your Raspberry PI, wait a couple seconds and press enter to display the OpenWRT prompt. diff --git a/static/blog/install-openwrt-raspberry-pi/uart-pins.jpeg b/content/english/blog/install-openwrt-raspberry-pi/uart-pins.jpeg similarity index 100% rename from static/blog/install-openwrt-raspberry-pi/uart-pins.jpeg rename to content/english/blog/install-openwrt-raspberry-pi/uart-pins.jpeg diff --git a/content/blog/install-operator-openshift-cli.md b/content/english/blog/install-operator-openshift-cli.md similarity index 99% rename from content/blog/install-operator-openshift-cli.md rename to content/english/blog/install-operator-openshift-cli.md index f98bf38..197c14d 100644 --- a/content/blog/install-operator-openshift-cli.md +++ b/content/english/blog/install-operator-openshift-cli.md @@ -3,6 +3,9 @@ title: "Install Kubernetes operators in OpenShift using only the CLI" date: 2020-04-24T00:00:00+02:00 opensource: - OpenShift +topics: +- Containers +- Kubernetes Operators --- OpenShift 4 went all-in on Kubernetes operators: they are used for installation of the platform itself but also to install databases, middlewares, etc. @@ -12,6 +15,8 @@ Most software now provide an operator and describe how to use it. Nevertheless, almost every software documentation I read so far, includes the steps to install the operator using the nice GUI of OpenShift 4. But since my OpenShift environments are provisioned by a playbook, I want to be able to install operators using the CLI only! + + The [OpenShift official documentation](https://docs.openshift.com/container-platform/4.3/operators/olm-adding-operators-to-cluster.html#olm-installing-operator-from-operatorhub-using-cli_olm-adding-operators-to-a-cluster) covers this part but I did not find it very clear. So, this article tries to make it clearer: **how to install Kubernetes operators in OpenShift using only the CLI**. diff --git a/content/blog/is-my-ntp-daemon-working.md b/content/english/blog/is-my-ntp-daemon-working.md similarity index 99% rename from content/blog/is-my-ntp-daemon-working.md rename to content/english/blog/is-my-ntp-daemon-working.md index 9651bb0..b4b7884 100644 --- a/content/blog/is-my-ntp-daemon-working.md +++ b/content/english/blog/is-my-ntp-daemon-working.md @@ -17,6 +17,8 @@ This can happen when your [NTP](https://en.wikipedia.org/wiki/Network_Time_Proto daemon is not synchronized. This means it cannot reliably determine the current time. + + First, make sure your NTP daemon is started: ```raw diff --git a/static/blog/jmeter-assess-software-performances/control1.png b/content/english/blog/jmeter-assess-software-performances/control1.png similarity index 100% rename from static/blog/jmeter-assess-software-performances/control1.png rename to content/english/blog/jmeter-assess-software-performances/control1.png diff --git a/static/blog/jmeter-assess-software-performances/control2.png b/content/english/blog/jmeter-assess-software-performances/control2.png similarity index 100% rename from static/blog/jmeter-assess-software-performances/control2.png rename to content/english/blog/jmeter-assess-software-performances/control2.png diff --git a/static/blog/jmeter-assess-software-performances/control3.png b/content/english/blog/jmeter-assess-software-performances/control3.png similarity index 100% rename from static/blog/jmeter-assess-software-performances/control3.png rename to content/english/blog/jmeter-assess-software-performances/control3.png diff --git a/static/blog/jmeter-assess-software-performances/if.png b/content/english/blog/jmeter-assess-software-performances/if.png similarity index 100% rename from static/blog/jmeter-assess-software-performances/if.png rename to content/english/blog/jmeter-assess-software-performances/if.png diff --git a/content/blog/jmeter-assess-software-performances.md b/content/english/blog/jmeter-assess-software-performances/index.md similarity index 93% rename from content/blog/jmeter-assess-software-performances.md rename to content/english/blog/jmeter-assess-software-performances/index.md index f220b17..97c5a09 100644 --- a/content/blog/jmeter-assess-software-performances.md +++ b/content/english/blog/jmeter-assess-software-performances/index.md @@ -2,9 +2,11 @@ title: "Use JMeter to assess software performances" date: 2020-07-24T00:00:00+02:00 opensource: -- jmeter -topic: -- performance-testing +- JMeter +topics: +- Performance testing +resources: +- '*.png' --- One of my side projects (the [Telegram Photo Bot](https://github.com/nmasse-itix/Telegram-Photo-Album-Bot)), have some performance issues that I will have to tackle. @@ -12,6 +14,8 @@ I could have jumped into the code and changed something, hoping it will improve But that would be ineffective and unprofessional. So, I decided to have an honest measure of the current performances as well as a reproducible setup to have consistent measures over time. + + This article explains how I built my performance testing lab using [JMeter](https://jmeter.apache.org/index.html) and an old ARM board. To keep this article short and readable, I focused on the assessment of two HTTP libraries (golang's net/http and valyala's fasthttp), leaving the discussion about the Telegram Photo Bot performances for a next article. @@ -100,7 +104,7 @@ http { My first measure on the control (nginx) gave strange results. -![control1](control1.png) +{{< attachedFigure src="control1.png" title="First measure gave results too low to be representative of nginx's performances." >}} Less than 30 tps, even on an old ARM board, is definitely too low to be representative of nginx's performances. Using [Wireshark](https://www.wireshark.org/), I discovered that JMeter did not established [Keep-Alive connections](https://sqa.stackexchange.com/questions/38211/re-using-the-tcp-connections-with-jmeter-like-a-real-browser). @@ -133,13 +137,13 @@ httpclient.reset_state_on_thread_group_iteration=false With Keep-Alive enabled, the 1200 tps are much more inline with the known performance level of nginx. Except there is a performance drop every 10-15 seconds that is not expected. -![control2](control2.png) +{{< attachedFigure src="control2.png" title="Second measure shows a periodic performance drop." >}} Using Wireshark, I discovered that during those performance drops, there are [TCP packets retransmissions](https://wiki.wireshark.org/DuplicatePackets). At that time, my Macbook Pro hosting the injector was connected **using Wifi**. I switched to a good old Ethernet cable, and this time the results on the control were as expected. -![control3](control3.png) +{{< attachedFigure src="control3.png" title="Third measure is ok." >}} As a conclusion, always have a control in your experience! @@ -147,7 +151,7 @@ As a conclusion, always have a control in your experience! To build my JMeter Test Plan, I started by adding a **User Defined Variables** component that holds all the settings related to lab environment (DNS names, ports, tokens, etc.). -![udv](udv.png) +{{< attachedFigure src="udv.png" title="JMeter User Defined Variables" >}} I added a variable named **scenario** whose value will be passed to JMeter from the CLI. This enables me to run all my experiments automatically from a script, one after another. @@ -159,12 +163,12 @@ ${__P(parameter-name,default-value)} I configured a **Thread Group** based on the **jp@gc - Ultimate Thread Group** with five concurrent users. -![thread-group](thread-group.png) +{{< attachedFigure src="thread-group.png" title="JMeter Thread Group" >}} And finally, a **Loop** component with three **If Controllers** underneath. Each **If Controller** holds an **HTTP Probe** configured for the target scenario. -![if](if.png) +{{< attachedFigure src="if.png" title="JMeter If Controller" >}} The If Controllers are defined with a **jexl3** expression, asserting the value of the **scenario** variable. diff --git a/static/blog/jmeter-assess-software-performances/thread-group.png b/content/english/blog/jmeter-assess-software-performances/thread-group.png similarity index 100% rename from static/blog/jmeter-assess-software-performances/thread-group.png rename to content/english/blog/jmeter-assess-software-performances/thread-group.png diff --git a/static/blog/jmeter-assess-software-performances/udv.png b/content/english/blog/jmeter-assess-software-performances/udv.png similarity index 100% rename from static/blog/jmeter-assess-software-performances/udv.png rename to content/english/blog/jmeter-assess-software-performances/udv.png diff --git a/content/blog/m4-as-replacement-for-sed.md b/content/english/blog/m4-as-replacement-for-sed.md similarity index 100% rename from content/blog/m4-as-replacement-for-sed.md rename to content/english/blog/m4-as-replacement-for-sed.md diff --git a/content/blog/nginx-with-tls-on-openwrt.md b/content/english/blog/nginx-with-tls-on-openwrt/index.md similarity index 98% rename from content/blog/nginx-with-tls-on-openwrt.md rename to content/english/blog/nginx-with-tls-on-openwrt/index.md index fcabce5..90933f5 100644 --- a/content/blog/nginx-with-tls-on-openwrt.md +++ b/content/english/blog/nginx-with-tls-on-openwrt/index.md @@ -4,11 +4,17 @@ date: 2019-12-19T00:00:00+02:00 opensource: - OpenWRT - nginx +topics: +- Embedded Systems +resources: +- '*.png' --- In the article "[Install OpenWRT on your Raspberry PI](../install-openwrt-raspberry-pi/)", I explained how to install OpenWRT on a Raspberry PI and the first steps as an OpenWRT user. As I plan to use my Raspberry PI to host plenty of web applications, I wanted to setup a versatile reverse proxy to protect them all, along with TLS support to meet nowadays security requirements. + + OpenWRT has an [nginx package](https://openwrt.org/packages/pkgdata/nginx), ready to be installed using *opkg* but unfortunately it does not have TLS enabled. So we need to recompile nginx with TLS enabled! ## Install the OpenWRT SDK @@ -81,7 +87,7 @@ Enter **Global Build Settings** and: * Press space to unset **Select all userspace packages by default** * Leave **Cryptographically sign packages** set -![make menuconfig](make-menuconfig.png) +{{< attachedFigure src="make-menuconfig.png" title="Parameters to activate in your make menuconfig" >}} Go back to the root menu. diff --git a/static/blog/nginx-with-tls-on-openwrt/make-menuconfig.png b/content/english/blog/nginx-with-tls-on-openwrt/make-menuconfig.png similarity index 100% rename from static/blog/nginx-with-tls-on-openwrt/make-menuconfig.png rename to content/english/blog/nginx-with-tls-on-openwrt/make-menuconfig.png diff --git a/content/blog/print-config-file-without-comments.md b/content/english/blog/print-config-file-without-comments.md similarity index 99% rename from content/blog/print-config-file-without-comments.md rename to content/english/blog/print-config-file-without-comments.md index 609a8a3..42b47f7 100644 --- a/content/blog/print-config-file-without-comments.md +++ b/content/english/blog/print-config-file-without-comments.md @@ -9,6 +9,8 @@ Sounds familiar? Not that comments are useless in a configuration file but sometimes it's handy to print a configuration file without the comment lines. Especially when the file is thousand lines long but the useful lines fit the twenty five lines of a standard terminal. + + The `egrep` command which is standard on most Linux distributions and on MacOS, can strip out the unwanted lines: ```sh diff --git a/content/blog/running-redhat-sso-outside-openshift.md b/content/english/blog/running-redhat-sso-outside-openshift.md similarity index 99% rename from content/blog/running-redhat-sso-outside-openshift.md rename to content/english/blog/running-redhat-sso-outside-openshift.md index 605bbba..cbefa9b 100644 --- a/content/blog/running-redhat-sso-outside-openshift.md +++ b/content/english/blog/running-redhat-sso-outside-openshift.md @@ -3,12 +3,16 @@ title: "Running Red Hat SSO outside of OpenShift" date: 2019-10-10T00:00:00+02:00 opensource: - Keycloak +topics: +- Containers --- In an article named [Red Hat Single Sign-On: Give it a try for no cost!](https://developers.redhat.com/blog/2019/02/07/red-hat-single-sign-on-give-it-a-try-for-no-cost/), I explained how to deploy Red Hat SSO very easily in any OpenShift cluster. As pointed by a reader in a comment, as widespread OpenShift can be, not everyone has access to a running OpenShift cluster. So, here is how to run Red Hat SSO outside of OpenShift: using only plain Docker commands. + + The rest of this procedure assumes you already have a token to access the Red Hat registry (full procedure described in [my article](https://developers.redhat.com/blog/2019/02/07/red-hat-single-sign-on-give-it-a-try-for-no-cost/) and in the [Red Hat SSO Getting Started guide, chapter 3, section 3.1](https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.3/html/red_hat_single_sign-on_for_openshift/get_started)). Start by logging in with this token using the *docker login* command (do not forget to replace the login and password with yours): diff --git a/content/blog/secure-openshift-4-openid-connect-authentication.md b/content/english/blog/secure-openshift-4-openid-connect-authentication.md similarity index 99% rename from content/blog/secure-openshift-4-openid-connect-authentication.md rename to content/english/blog/secure-openshift-4-openid-connect-authentication.md index f05a4d6..014c4da 100644 --- a/content/blog/secure-openshift-4-openid-connect-authentication.md +++ b/content/english/blog/secure-openshift-4-openid-connect-authentication.md @@ -14,6 +14,8 @@ But this is yet another password to remember! OpenShift can handle the [OpenID Connect](https://openid.net/connect/) protocol and thus offers Single Sign On to its users. No additional password to remember: you can login to the OpenShift console with your [Google Account](../use-google-account-openid-connect-provider) for instance. + + ## Pre-requisites The rest of this article assumes you have already setup your OpenID Connect client in the Google Developer Console as explained in this article: [Use your Google Account as an OpenID Connect provider](../use-google-account-openid-connect-provider). diff --git a/content/blog/secure-quarkus-api-with-keycloak.md b/content/english/blog/secure-quarkus-api-with-keycloak.md similarity index 99% rename from content/blog/secure-quarkus-api-with-keycloak.md rename to content/english/blog/secure-quarkus-api-with-keycloak.md index 3c5dac8..d8d246e 100644 --- a/content/blog/secure-quarkus-api-with-keycloak.md +++ b/content/english/blog/secure-quarkus-api-with-keycloak.md @@ -14,6 +14,8 @@ Quarkus can be used for any type of backend development, including API-enabled b In this article, I'm describing how to secure a Quarkus API with Keycloak using JWT tokens. + + ## Preparation As a pre-requisite, install [Maven](https://maven.apache.org/), [jq](https://stedolan.github.io/jq/download/) and [jwt-cli](https://github.com/mike-engel/jwt-cli#installation). diff --git a/content/blog/secure-raspberry-pi-keycloak-gatekeeper.md b/content/english/blog/secure-raspberry-pi-keycloak-gatekeeper.md similarity index 99% rename from content/blog/secure-raspberry-pi-keycloak-gatekeeper.md rename to content/english/blog/secure-raspberry-pi-keycloak-gatekeeper.md index dc46910..91beaa4 100644 --- a/content/blog/secure-raspberry-pi-keycloak-gatekeeper.md +++ b/content/english/blog/secure-raspberry-pi-keycloak-gatekeeper.md @@ -13,6 +13,8 @@ Some of the web applications that I installed on my Raspberry PI do not feature No authentication means that anybody on the internet could reach those applications and play with them. This article explains how to secure applications running on a Raspberry PI with [Keycloak Gatekeeper](https://github.com/keycloak/keycloak-gatekeeper). + + [Keycloak Gatekeeper](https://github.com/keycloak/keycloak-gatekeeper) is a reverse proxy whose sole purpose is to authenticate the end-users using the [OpenID Connect](https://openid.net/connect/) protocol. If Keycloak Gatekeeper is best used in conjunction with the [Keycloak Identity Provider](https://www.keycloak.org/), it can also be used with any Identity Provider that conforms to the OpenID Connect specifications. diff --git a/content/blog/send-mails-openwrt-msmtp-gmail.md b/content/english/blog/send-mails-openwrt-msmtp-gmail.md similarity index 99% rename from content/blog/send-mails-openwrt-msmtp-gmail.md rename to content/english/blog/send-mails-openwrt-msmtp-gmail.md index d9bf376..ea4552e 100644 --- a/content/blog/send-mails-openwrt-msmtp-gmail.md +++ b/content/english/blog/send-mails-openwrt-msmtp-gmail.md @@ -3,6 +3,8 @@ title: "Send mails on OpenWRT with MSMTP and Gmail" date: 2020-04-08T00:00:00+02:00 opensource: - OpenWRT +topics: +- Embedded Systems --- A previous article named "[Install OpenWRT on your Raspberry PI](../install-openwrt-raspberry-pi/)" goes through the setup process to use OpenWRT on your Raspberry PI. @@ -11,6 +13,9 @@ With great power comes great responsibilities. So, you might want to be notified when something goes wrong, a cron job failed, a hard disk is dying, etc., so that you can fix the problem at earliest, maybe before anyone else could notice. This article explains how to send mails on OpenWRT with MSMTP and a GMail account. + + + You can adapt this procedure to any email provider that supports SMTP access with a login and password. ## Configure GMail diff --git a/content/blog/solving-this-module-requires-the-openshift-python-client-error.md b/content/english/blog/solving-this-module-requires-the-openshift-python-client-error.md similarity index 99% rename from content/blog/solving-this-module-requires-the-openshift-python-client-error.md rename to content/english/blog/solving-this-module-requires-the-openshift-python-client-error.md index 36fddf1..1751b65 100644 --- a/content/blog/solving-this-module-requires-the-openshift-python-client-error.md +++ b/content/english/blog/solving-this-module-requires-the-openshift-python-client-error.md @@ -4,6 +4,8 @@ date: 2019-09-13T00:00:00+02:00 opensource: - OpenShift - Ansible +topics: +- IT Automation --- If you are using MacOS to develop Operators based on Ansible or simply running Ansible playbooks straight from your Mac, you might encounter this error: diff --git a/content/blog/testing-hard-drive-ssd-performance.md b/content/english/blog/testing-hard-drive-ssd-performance.md similarity index 98% rename from content/blog/testing-hard-drive-ssd-performance.md rename to content/english/blog/testing-hard-drive-ssd-performance.md index 980f5f9..567dee4 100644 --- a/content/blog/testing-hard-drive-ssd-performance.md +++ b/content/english/blog/testing-hard-drive-ssd-performance.md @@ -9,6 +9,8 @@ If your Linux system appears to be slow, it might be an issue with your disks, either hard drive or SSD. Hopefully, with a few commands you can get an idea of the performances of your disks. + + First, you will have to install `hdparm` using `yum` or `dnf`: ```sh diff --git a/static/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/change-qos.yaml b/content/english/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/change-qos.yaml similarity index 100% rename from static/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/change-qos.yaml rename to content/english/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/change-qos.yaml diff --git a/content/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload.md b/content/english/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/index.md similarity index 97% rename from content/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload.md rename to content/english/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/index.md index 50f2486..20a412d 100644 --- a/content/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload.md +++ b/content/english/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/index.md @@ -4,12 +4,18 @@ date: 2019-02-06T00:00:00+02:00 opensource: - OpenShift - Ansible +topics: +- IT Automation +resources: +- src: '*.yaml' --- As I was administering my OpenShift cluster, I found out that I had a too much memory requests. To preserve a good quality of service on my cluster, I had to tacle this issue. + + Resource requests and limits in OpenShift (and Kubernetes in general) are the concepts that helps define the quality of service of every running Pod. @@ -188,6 +194,6 @@ blacklist of critical namespaces that should not be touched. when: obj.namespace not in namespace_blacklist {{< / highlight >}} -You can find the complete playbook [here](change-qos.yaml). Of course, it is +You can find the complete playbook [here]({{< attachedFileLink src="change-qos.yaml" >}}). Of course, it is very rough and would need to more work to be used on a daily basis but for a single use this is sufficient. diff --git a/static/blog/use-google-account-openid-connect-provider/auth-ok.png b/content/english/blog/use-google-account-openid-connect-provider/auth-ok.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/auth-ok.png rename to content/english/blog/use-google-account-openid-connect-provider/auth-ok.png diff --git a/static/blog/use-google-account-openid-connect-provider/auth.png b/content/english/blog/use-google-account-openid-connect-provider/auth.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/auth.png rename to content/english/blog/use-google-account-openid-connect-provider/auth.png diff --git a/static/blog/use-google-account-openid-connect-provider/authorized-domains.png b/content/english/blog/use-google-account-openid-connect-provider/authorized-domains.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/authorized-domains.png rename to content/english/blog/use-google-account-openid-connect-provider/authorized-domains.png diff --git a/static/blog/use-google-account-openid-connect-provider/create-credentials.png b/content/english/blog/use-google-account-openid-connect-provider/create-credentials.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/create-credentials.png rename to content/english/blog/use-google-account-openid-connect-provider/create-credentials.png diff --git a/static/blog/use-google-account-openid-connect-provider/create-project.png b/content/english/blog/use-google-account-openid-connect-provider/create-project.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/create-project.png rename to content/english/blog/use-google-account-openid-connect-provider/create-project.png diff --git a/content/blog/use-google-account-openid-connect-provider.md b/content/english/blog/use-google-account-openid-connect-provider/index.md similarity index 85% rename from content/blog/use-google-account-openid-connect-provider.md rename to content/english/blog/use-google-account-openid-connect-provider/index.md index 297d869..cab065c 100644 --- a/content/blog/use-google-account-openid-connect-provider.md +++ b/content/english/blog/use-google-account-openid-connect-provider/index.md @@ -3,6 +3,9 @@ title: "Use your Google Account as an OpenID Connect provider" date: 2020-03-27T00:00:00+02:00 topics: - OpenID Connect +resources: +- src: '*.png' +- src: '*.sh' --- We have passwords everywhere: to unlock our computer, to reach our inbox, to login as root on our Raspberry PI, etc. @@ -10,6 +13,8 @@ Unless you have a password vault to store your credentials securely, it is very This article goes through all the steps to use your Google Account as an [OpenID Connect](https://openid.net/connect/) provider and subsequent articles (check links at the bottom of this article) explain how to configure the different services and software to use your Google Account as an OpenID Connect provider. + + The article is divided in three parts. * a general overview of OpenID Connect protocol @@ -45,15 +50,15 @@ First, connect to the [Google Developer Console](https://console.developers.goog Click **Create Project**. -![create project](create-project.png) +{{< attachedFigure src="create-project.png" title="Click 'Create Project'." >}} Fill-in the **Project name** (free choice). The location does not matter. Click **Create**. -![project name](project-name.png) +{{< attachedFigure src="project-name.png" title="Fill-in the 'Project name'. Click 'Create'." >}} Click **OAuth Consent screen**. If you are a Google Suite user, select **Internal**. If you are a regular GMail user, select **External**. Click **Create**. -![oauth-consent](oauth-consent.png) +{{< attachedFigure src="oauth-consent.png" title="The OAuth Consent screen." >}} Choose an application name (free choice). Leave the default scopes. @@ -61,15 +66,15 @@ Add your personal domain to the list of **Authorized Domains**. For instance, if your target service is at *raspberry-pi.example.test*, add **example.test**. **DO NOT FORGET to press Enter!** -![authorized-domains](authorized-domains.png) +{{< attachedFigure src="authorized-domains.png" title="Add your personal domain to the list of Authorized Domains." >}} Fill-in the **Application Homepage Link** and **Application Privacy Policy Link** (free choices). Click **Save**. -![links](links.png) +{{< attachedFigure src="links.png" title="Fill-in the links." >}} Click **Credentials**. Select **+ Create Credentials**, then **OAuth Client ID**. -![create-credentials](create-credentials.png) +{{< attachedFigure src="create-credentials.png" title="Create the OAuth credentials." >}} Under **Application type**, select **Web Application**. Choose a name for your application (free choice). @@ -81,7 +86,7 @@ To be able to do so, we need to add a special Redirect URI: **http://localhost:6 Click **Create**. -![redirect-uri](redirect-uri.png) +{{< attachedFigure src="redirect-uri.png" title="Fill-in the Redirect URI." >}} Google generated a **Client ID** and **Client Secret** for you. Keep them somewhere safe! @@ -92,7 +97,7 @@ There are several open source tools to test your OpenID Connect setup but a very Download the following script and make it executable. ```sh -curl -o test-auth.sh {{< baseurl >}}blog/use-google-account-openid-connect-provider/test-auth.sh +curl -o test-auth.sh {{< attachedFileLink src="test-auth.sh" >}} chmod 755 test-auth.sh ``` @@ -111,15 +116,15 @@ Now, run this script! The script generates a URL that you need to copy and paste in your web browser. -![script-start](script-start.png) +{{< attachedFigure src="script-start.png" title="The script generates a URL that you need to copy and paste in your web browser." >}} If you are not yet logged in, Google asks you to authenticate. -![auth](auth.png) +{{< attachedFigure src="auth.png" title="If you are not yet logged in, Google asks you to authenticate." >}} Once logged in or if you are already logged in, you are redirected to the fake Redirect URI we registered earlier. -![auth-ok](auth-ok.png) +{{< attachedFigure src="auth-ok.png" title="You are redirected to the fake Redirect URI we registered earlier" >}} We registered a fake Redirect URI so that we could play each part of the OpenID Connect exchange manually. **So, if you see an error message from your web browser saying that it cannot connect to the target service: THIS IS EXPECTED FOR OUR TEST.** @@ -129,7 +134,7 @@ Once the browser is redirected at `http://localhost:666/stop-here`, copy the red Remember that the Authorization Code is very short lived. So, be quick! -![script-url](script-url.png) +{{< attachedFigure src="script-url.png" title="Paste the Redirect URI." >}} The script contacts the Authorization Server to get an Access Token from the Authorization Code captured in the Redirect URI. diff --git a/static/blog/use-google-account-openid-connect-provider/links.png b/content/english/blog/use-google-account-openid-connect-provider/links.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/links.png rename to content/english/blog/use-google-account-openid-connect-provider/links.png diff --git a/static/blog/use-google-account-openid-connect-provider/oauth-consent.png b/content/english/blog/use-google-account-openid-connect-provider/oauth-consent.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/oauth-consent.png rename to content/english/blog/use-google-account-openid-connect-provider/oauth-consent.png diff --git a/static/blog/use-google-account-openid-connect-provider/project-name.png b/content/english/blog/use-google-account-openid-connect-provider/project-name.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/project-name.png rename to content/english/blog/use-google-account-openid-connect-provider/project-name.png diff --git a/static/blog/use-google-account-openid-connect-provider/redirect-uri.png b/content/english/blog/use-google-account-openid-connect-provider/redirect-uri.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/redirect-uri.png rename to content/english/blog/use-google-account-openid-connect-provider/redirect-uri.png diff --git a/static/blog/use-google-account-openid-connect-provider/script-start.png b/content/english/blog/use-google-account-openid-connect-provider/script-start.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/script-start.png rename to content/english/blog/use-google-account-openid-connect-provider/script-start.png diff --git a/static/blog/use-google-account-openid-connect-provider/script-url.png b/content/english/blog/use-google-account-openid-connect-provider/script-url.png similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/script-url.png rename to content/english/blog/use-google-account-openid-connect-provider/script-url.png diff --git a/static/blog/use-google-account-openid-connect-provider/test-auth.sh b/content/english/blog/use-google-account-openid-connect-provider/test-auth.sh similarity index 100% rename from static/blog/use-google-account-openid-connect-provider/test-auth.sh rename to content/english/blog/use-google-account-openid-connect-provider/test-auth.sh diff --git a/content/blog/use-qlkube-to-query-the-kubernetes-api.md b/content/english/blog/use-qlkube-to-query-the-kubernetes-api.md similarity index 99% rename from content/blog/use-qlkube-to-query-the-kubernetes-api.md rename to content/english/blog/use-qlkube-to-query-the-kubernetes-api.md index a5cd4c6..29f54cb 100644 --- a/content/blog/use-qlkube-to-query-the-kubernetes-api.md +++ b/content/english/blog/use-qlkube-to-query-the-kubernetes-api.md @@ -3,7 +3,7 @@ title: "Use QLKube to query the Kubernetes API" date: 2019-06-07T00:00:00+02:00 opensource: - OpenShift -topic: +topics: - GraphQL --- @@ -12,6 +12,8 @@ topic: It strives to reduce the chattiness clients can experience when querying REST APIs. It is very useful for mobile application and web development: by reducing the number of roundtrips needed to fetch the relevant data and by fetching only the needed field, the network usage is greatly reduced. + + To install QLKube in OpenShift, use the NodeJS Source-to-Image builder: {{< highlight sh >}} diff --git a/static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-add-webhook.png b/content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-add-webhook.png similarity index 100% rename from static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-add-webhook.png rename to content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-add-webhook.png diff --git a/static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-webhook.png b/content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-webhook.png similarity index 100% rename from static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-webhook.png rename to content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/github-webhook.png diff --git a/content/blog/writing-workshop-instructions-with-hugo-deploy-openshift.md b/content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/index.md similarity index 94% rename from content/blog/writing-workshop-instructions-with-hugo-deploy-openshift.md rename to content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/index.md index f499784..5381951 100644 --- a/content/blog/writing-workshop-instructions-with-hugo-deploy-openshift.md +++ b/content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/index.md @@ -4,11 +4,15 @@ date: 2019-02-27T00:00:00+02:00 opensource: - Hugo - OpenShift +resources: +- '*.png' --- This is the third part of my series covering how to [Write workshop instructions with Hugo](../writing-workshop-instructions-with-hugo/). In this article, we will deploy our [Hugo mini-training](https://github.com/nmasse-itix/hugo-workshop/) as a container in OpenShift. + + Since Hugo is a static website generator, we only need a web server in our container to serve those pages. Let's settle for nginx that is [neatly packaged as a container image, as part of the Software Collections](https://www.softwarecollections.org/en/scls/rhscl/rh-nginx114/). And to build our final container image that will contain both our website (the static pages to serve) and the web server itself, we will use the [Source-to-image (S2I)](https://github.com/openshift/source-to-image) tool. Hopefully, the nginx image of the Software Collections is already S2I enabled! @@ -164,25 +168,25 @@ First, get the GitHub Webhook URL of your BuildConfig: - Open the **Configuration** tab - Copy the **GitHub Webhook URL** -![The BuildConfig on OpenShift](openshift-buildconfig-webhook.png) +{{< attachedFigure src="openshift-buildconfig-webhook.png" title="The BuildConfig on OpenShift." >}} Then, go on your GitHub repository and add a webhook: - Go to **Settings** > **Webhooks** - Click **Add webhook** -![Add a webhook on GitHub](github-add-webhook.png) +{{< attachedFigure src="github-add-webhook.png" title="Add a webhook on GitHub." >}} - Paste your Webhook URL in the **Payload URL** field - Select `application/json` in the **Content type** dropdown list - Check **Disable** in the **SSL verification** section if your OpenShift console has a self-signed certificate - Click **Add webhook** -![The GitHub webhook](github-webhook.png) +{{< attachedFigure src="github-webhook.png" title="The GitHub webhook." >}} Try to push some changes to your GitHub repository and see OpenShift rebuilding and deploying your website! -![OpenShift rebuilding and redeploying your website](openshift-rebuild.png) +{{< attachedFigure src="openshift-rebuild.png" title="OpenShift rebuilding and redeploying your website" >}} ## Conclusion diff --git a/static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-buildconfig-webhook.png b/content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-buildconfig-webhook.png similarity index 100% rename from static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-buildconfig-webhook.png rename to content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-buildconfig-webhook.png diff --git a/static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-rebuild.png b/content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-rebuild.png similarity index 100% rename from static/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-rebuild.png rename to content/english/blog/writing-workshop-instructions-with-hugo-deploy-openshift/openshift-rebuild.png diff --git a/content/blog/writing-workshop-instructions-with-hugo-variables.md b/content/english/blog/writing-workshop-instructions-with-hugo-variables.md similarity index 94% rename from content/blog/writing-workshop-instructions-with-hugo-variables.md rename to content/english/blog/writing-workshop-instructions-with-hugo-variables.md index 13972e0..1674124 100644 --- a/content/blog/writing-workshop-instructions-with-hugo-variables.md +++ b/content/english/blog/writing-workshop-instructions-with-hugo-variables.md @@ -16,6 +16,8 @@ In the first part, we saw how to: For this second part, we will add variables to our content so that we can easily adjust the workshop instructions to different use cases. + + One of the most common usage we have for variables is to deliver the same workshop on different environments. This means URLs, username and passwords change and we need to adjust our workshop instructions very quicky to match the new environment. @@ -47,7 +49,7 @@ Test locally your changes new website by running: hugo server -D ``` -You can now open [localhost:1313/packaging/git-commit/](http://localhost:1313/packaging/git-commit/) +You can now open http://localhost:1313/packaging/git-commit/ and confirm that variables have been expanded: ```md diff --git a/static/blog/writing-workshop-instructions-with-hugo/hugo-screenshot.png b/content/english/blog/writing-workshop-instructions-with-hugo/hugo-screenshot.png similarity index 100% rename from static/blog/writing-workshop-instructions-with-hugo/hugo-screenshot.png rename to content/english/blog/writing-workshop-instructions-with-hugo/hugo-screenshot.png diff --git a/content/blog/writing-workshop-instructions-with-hugo.md b/content/english/blog/writing-workshop-instructions-with-hugo/index.md similarity index 97% rename from content/blog/writing-workshop-instructions-with-hugo.md rename to content/english/blog/writing-workshop-instructions-with-hugo/index.md index a73055c..b5a566e 100644 --- a/content/blog/writing-workshop-instructions-with-hugo.md +++ b/content/english/blog/writing-workshop-instructions-with-hugo/index.md @@ -3,6 +3,8 @@ title: "Writing workshop instructions with Hugo" date: 2019-02-20T00:00:00+02:00 opensource: - Hugo +resources: +- '*.png' --- In my professional life, I often have to lead workshops with customers or @@ -29,6 +31,8 @@ but is difficult to work with for the participants. Hopefully [Hugo](https://gohugo.io/) can help us! + + As an example, in the rest of this article, we will craft a mini-training about Hugo! @@ -197,7 +201,7 @@ git push -u origin master Congratulations! You now have your training instructions neatly organised and clearly presented. Maintenance and collaboration have been greatly simplified! -![Screenshot of our mini-training](hugo-screenshot.png) +{{< attachedFigure src="hugo-screenshot.png" title="Screenshot of our mini-training." >}} In this first part of the series, we presented a very light introduction to Hugo and its application to workshop instructions. Be sure to read [part 2: Writing workshop instructions with Hugo, with variables in your content](../writing-workshop-instructions-with-hugo-variables/) to discover advanced usages. diff --git a/content/contact/index.md b/content/english/contact/index.md similarity index 89% rename from content/contact/index.md rename to content/english/contact/index.md index 1df59db..7f1b639 100644 --- a/content/contact/index.md +++ b/content/english/contact/index.md @@ -1,7 +1,5 @@ --- title: "Contact me" -date: 2018-01-01T00:00:00+02:00 -draft: false --- Do you need something from me ? @@ -11,7 +9,7 @@ email address or on twitter at [@nmasse_itix](https://twitter.com/nmasse_itix). ![My Email](/images/my-email.png) -If you want to know more about my professional career, you can find it on [Linkedin](https://www.linkedin.com/in/nicolasmasse/) but I can also provide a current CV or bio upon request. +If you want to know more about my professional career, you can find it on [Linkedin](https://www.linkedin.com/in/nicolasmasse/) but I can also provide a current CV or biography upon request. If you are reaching out to me for one of my [Open Source projects](https://github.com/nmasse-itix?tab=repositories) or one of my contributions, please open an issue in the relevant GitHub repository diff --git a/content/english/opensource/_index.md b/content/english/opensource/_index.md new file mode 100644 index 0000000..7064469 --- /dev/null +++ b/content/english/opensource/_index.md @@ -0,0 +1,6 @@ +--- +title: "Open Source" +--- + +In my daily work I use many Open Source communities, on which I have written articles. +Each Open Source community below is a link to the list of matching articles. diff --git a/content/english/speaking/_index.md b/content/english/speaking/_index.md new file mode 100644 index 0000000..f60661f --- /dev/null +++ b/content/english/speaking/_index.md @@ -0,0 +1,6 @@ +--- +title: "Speaking" +--- + +I am occasionally invited to customers or corporate events to talk about APIs and SSO. +I have compiled the list of my latest talks below. diff --git a/content/speaking/adeo-summit-2018.md b/content/english/speaking/adeo-summit-2018.md similarity index 100% rename from content/speaking/adeo-summit-2018.md rename to content/english/speaking/adeo-summit-2018.md diff --git a/content/speaking/apidays-2017.md b/content/english/speaking/apidays-2017.md similarity index 100% rename from content/speaking/apidays-2017.md rename to content/english/speaking/apidays-2017.md diff --git a/content/speaking/develop-deploy-deliver-continuously.md b/content/english/speaking/develop-deploy-deliver-continuously.md similarity index 100% rename from content/speaking/develop-deploy-deliver-continuously.md rename to content/english/speaking/develop-deploy-deliver-continuously.md diff --git a/static/speaking/2018-10-10-Devoteam-TechForPeople-1.jpg b/content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-1.jpg similarity index 100% rename from static/speaking/2018-10-10-Devoteam-TechForPeople-1.jpg rename to content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-1.jpg diff --git a/static/speaking/2018-10-10-Devoteam-TechForPeople-2.jpg b/content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-2.jpg similarity index 100% rename from static/speaking/2018-10-10-Devoteam-TechForPeople-2.jpg rename to content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-2.jpg diff --git a/static/speaking/2018-10-10-Devoteam-TechForPeople-3.jpg b/content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-3.jpg similarity index 100% rename from static/speaking/2018-10-10-Devoteam-TechForPeople-3.jpg rename to content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-3.jpg diff --git a/static/speaking/2018-10-10-Devoteam-TechForPeople-4.jpg b/content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-4.jpg similarity index 100% rename from static/speaking/2018-10-10-Devoteam-TechForPeople-4.jpg rename to content/english/speaking/devoteam-tech-for-people-2018/2018-10-10-Devoteam-TechForPeople-4.jpg diff --git a/content/english/speaking/devoteam-tech-for-people-2018/index.md b/content/english/speaking/devoteam-tech-for-people-2018/index.md new file mode 100644 index 0000000..7f2a512 --- /dev/null +++ b/content/english/speaking/devoteam-tech-for-people-2018/index.md @@ -0,0 +1,16 @@ +--- +title: "Devoteam #TechForPeople 2018" +date: 2018-10-10T00:00:00+02:00 +draft: false +resources: +- '*.png' +--- + +The 10th Septembre 2018, I co-presented a session named _"No API, No Future"_ +in which I exhibited the Red Hat's API Lifecycle Automation. The event +`#TechForPeople` was organized by Devoteam. + +{{< attachedFigure src="2018-10-10-Devoteam-TechForPeople-1.jpg" >}} +{{< attachedFigure src="2018-10-10-Devoteam-TechForPeople-2.jpg" >}} +{{< attachedFigure src="2018-10-10-Devoteam-TechForPeople-3.jpg" >}} +{{< attachedFigure src="2018-10-10-Devoteam-TechForPeople-4.jpg" >}} diff --git a/content/speaking/devoxx-france-2019.md b/content/english/speaking/devoxx-france-2019.md similarity index 100% rename from content/speaking/devoxx-france-2019.md rename to content/english/speaking/devoxx-france-2019.md diff --git a/content/speaking/red-hat-forum-2017.md b/content/english/speaking/red-hat-forum-2017.md similarity index 100% rename from content/speaking/red-hat-forum-2017.md rename to content/english/speaking/red-hat-forum-2017.md diff --git a/content/speaking/red-hat-forum-helsinki-2019.md b/content/english/speaking/red-hat-forum-helsinki-2019.md similarity index 100% rename from content/speaking/red-hat-forum-helsinki-2019.md rename to content/english/speaking/red-hat-forum-helsinki-2019.md diff --git a/content/speaking/red-hat-summit-2018.md b/content/english/speaking/red-hat-summit-2018.md similarity index 100% rename from content/speaking/red-hat-summit-2018.md rename to content/english/speaking/red-hat-summit-2018.md diff --git a/content/speaking/red-hat-summit-2019.md b/content/english/speaking/red-hat-summit-2019.md similarity index 100% rename from content/speaking/red-hat-summit-2019.md rename to content/english/speaking/red-hat-summit-2019.md diff --git a/static/speaking/2018-10-21-RHTE-Award.jpg b/content/english/speaking/red-hat-tech-exchange-2018/2018-10-21-RHTE-Award.jpg similarity index 100% rename from static/speaking/2018-10-21-RHTE-Award.jpg rename to content/english/speaking/red-hat-tech-exchange-2018/2018-10-21-RHTE-Award.jpg diff --git a/content/speaking/red-hat-tech-exchange-2018.md b/content/english/speaking/red-hat-tech-exchange-2018/index.md similarity index 77% rename from content/speaking/red-hat-tech-exchange-2018.md rename to content/english/speaking/red-hat-tech-exchange-2018/index.md index ffca08e..ad8ea44 100644 --- a/content/speaking/red-hat-tech-exchange-2018.md +++ b/content/english/speaking/red-hat-tech-exchange-2018/index.md @@ -2,6 +2,8 @@ title: "Red Hat Tech Exchange 2018" date: 2018-09-21T00:00:00+02:00 draft: false +resources: +- '*.jpg' --- From the 17th to 21th Septembre 2018, I co-presented two sessions: @@ -12,4 +14,4 @@ From the 17th to 21th Septembre 2018, I co-presented two sessions: For the session _An API Journey: from mock to deployment_, we received an award based on the amazing feedbacks from the public! -![We received our award, on-stage!](/speaking/2018-10-21-RHTE-Award.jpg) +{{< attachedFigure src="2018-10-21-RHTE-Award.jpg" title="We received our award, on-stage!" >}} diff --git a/static/speaking/2019-10-21-RHTE-Award.png b/content/english/speaking/red-hat-tech-exchange-2019/2019-10-21-RHTE-Award.png similarity index 100% rename from static/speaking/2019-10-21-RHTE-Award.png rename to content/english/speaking/red-hat-tech-exchange-2019/2019-10-21-RHTE-Award.png diff --git a/content/speaking/red-hat-tech-exchange-2019.md b/content/english/speaking/red-hat-tech-exchange-2019/index.md similarity index 84% rename from content/speaking/red-hat-tech-exchange-2019.md rename to content/english/speaking/red-hat-tech-exchange-2019/index.md index 290f322..98b16d0 100644 --- a/content/speaking/red-hat-tech-exchange-2019.md +++ b/content/english/speaking/red-hat-tech-exchange-2019/index.md @@ -2,6 +2,8 @@ title: "Red Hat Tech Exchange 2019" date: 2019-10-21T00:00:00+02:00 draft: false +resources: +- '*.png' --- During the three Red Hat Tech Exchange sessions (Americas, EMEA and APAC), I presented two sessions: @@ -11,4 +13,4 @@ During the three Red Hat Tech Exchange sessions (Americas, EMEA and APAC), I pre The session _Leverage the power of open source communities to manage your APIs_ has been the second best voted session in RHTE APAC! -![I received an award!](/speaking/2019-10-21-RHTE-Award.png) +{{< attachedFigure src="2019-10-21-RHTE-Award.png" title="I received an award!" >}} diff --git a/content/speaking/techweek-sg-2019.md b/content/english/speaking/techweek-sg-2019.md similarity index 100% rename from content/speaking/techweek-sg-2019.md rename to content/english/speaking/techweek-sg-2019.md diff --git a/content/english/topics/_index.md b/content/english/topics/_index.md new file mode 100644 index 0000000..eea2d7e --- /dev/null +++ b/content/english/topics/_index.md @@ -0,0 +1,6 @@ +--- +title: "Expertise" +--- + +During my various interventions on customer site, I had to work on various subjects for which I have written one or more articles. +Each subject is a link to the list of matching articles. diff --git a/content/writing/3scale-toolbox-deploy-an-api-from-the-cli.md b/content/english/writing/3scale-toolbox-deploy-an-api-from-the-cli.md similarity index 100% rename from content/writing/3scale-toolbox-deploy-an-api-from-the-cli.md rename to content/english/writing/3scale-toolbox-deploy-an-api-from-the-cli.md diff --git a/content/writing/5-principles-for-deploying-your-api-from-a-ci-cd-pipeline.md b/content/english/writing/5-principles-for-deploying-your-api-from-a-ci-cd-pipeline.md similarity index 100% rename from content/writing/5-principles-for-deploying-your-api-from-a-ci-cd-pipeline.md rename to content/english/writing/5-principles-for-deploying-your-api-from-a-ci-cd-pipeline.md diff --git a/content/english/writing/_index.md b/content/english/writing/_index.md new file mode 100644 index 0000000..25c2845 --- /dev/null +++ b/content/english/writing/_index.md @@ -0,0 +1,5 @@ +--- +title: "Writing" +--- + +I post articles from time to time on various websites as a guest. I have gathered a list of my recent posts below. diff --git a/content/writing/apis-as-a-product-get-started-in-no-time.md b/content/english/writing/apis-as-a-product-get-started-in-no-time.md similarity index 100% rename from content/writing/apis-as-a-product-get-started-in-no-time.md rename to content/english/writing/apis-as-a-product-get-started-in-no-time.md diff --git a/content/writing/apis-as-a-product-get-the-value-out-of-your-apis.md b/content/english/writing/apis-as-a-product-get-the-value-out-of-your-apis.md similarity index 100% rename from content/writing/apis-as-a-product-get-the-value-out-of-your-apis.md rename to content/english/writing/apis-as-a-product-get-the-value-out-of-your-apis.md diff --git a/content/writing/deploy-your-api-from-a-jenkins-pipeline.md b/content/english/writing/deploy-your-api-from-a-jenkins-pipeline.md similarity index 100% rename from content/writing/deploy-your-api-from-a-jenkins-pipeline.md rename to content/english/writing/deploy-your-api-from-a-jenkins-pipeline.md diff --git a/content/writing/full-api-lifecycle-management-a-primer.md b/content/english/writing/full-api-lifecycle-management-a-primer.md similarity index 100% rename from content/writing/full-api-lifecycle-management-a-primer.md rename to content/english/writing/full-api-lifecycle-management-a-primer.md diff --git a/content/writing/manage-your-apis-deployed-with-istio-service-mesh.md b/content/english/writing/manage-your-apis-deployed-with-istio-service-mesh.md similarity index 100% rename from content/writing/manage-your-apis-deployed-with-istio-service-mesh.md rename to content/english/writing/manage-your-apis-deployed-with-istio-service-mesh.md diff --git a/content/writing/red-hat-single-sign-on-give-it-a-try-for-no-cost.md b/content/english/writing/red-hat-single-sign-on-give-it-a-try-for-no-cost.md similarity index 100% rename from content/writing/red-hat-single-sign-on-give-it-a-try-for-no-cost.md rename to content/english/writing/red-hat-single-sign-on-give-it-a-try-for-no-cost.md diff --git a/content/writing/using-a-public-certificate-with-red-hat-single-sign-on-keycloak.md b/content/english/writing/using-a-public-certificate-with-red-hat-single-sign-on-keycloak.md similarity index 100% rename from content/writing/using-a-public-certificate-with-red-hat-single-sign-on-keycloak.md rename to content/english/writing/using-a-public-certificate-with-red-hat-single-sign-on-keycloak.md diff --git a/content/writing/using-the-3scale-toolbox-jenkins-shared-library.md b/content/english/writing/using-the-3scale-toolbox-jenkins-shared-library.md similarity index 100% rename from content/writing/using-the-3scale-toolbox-jenkins-shared-library.md rename to content/english/writing/using-the-3scale-toolbox-jenkins-shared-library.md diff --git a/content/french/_index.md b/content/french/_index.md new file mode 100644 index 0000000..d527097 --- /dev/null +++ b/content/french/_index.md @@ -0,0 +1,11 @@ +--- +title: "Nicolas Massé" +--- + +Je suis Nicolas Massé, vous me trouverez sur les réseaux sociaux sous le pseudo "nmasse-itix". +Développeur de formation, mon métier actuel est consultant avant-vente dans les domaines de l'[API Management]({{}}), le [Single Sign On]({{}}) et les [conteneurs]({{}}). + +Je travaille principalement avec des technologies [Open Source]({{}}) telles que [Keycloak]({{}}), [3scale]({{}}) ou [OpenShift]({{}}). +Je partage mon [expertise]({{}}) et mes centres d'intérêt sur ce site, [ailleurs sur le web]({{}}) et je donne occasionnellement des [conférences]({{}}). + +Je vous invite à lire [mon blog]({{}}) ou à en savoir plus [sur moi](https://www.linkedin.com/in/nicolasmasse/). diff --git a/content/french/contact/index.md b/content/french/contact/index.md new file mode 100644 index 0000000..504b361 --- /dev/null +++ b/content/french/contact/index.md @@ -0,0 +1,15 @@ +--- +title: "Me contacter" +--- + +Besoin de quelque chose ? + +Pour toute demande de conférence, d'article ou de prestation, vous pouvez me contacter directement à mon adresse e-mail ou sur Twitter à [@nmasse_itix](https://twitter.com/nmasse_itix). + +![Mon e-mail](/images/my-email.png) + +Si vous souhaitez en savoir plus sur mon parcours professionnel, vous pouvez le trouver sur [Linkedin](https://www.linkedin.com/in/nicolasmasse/) mais je peux également fournir un CV ou une biographie à jour sur demande. + +Si vous me contactez pour l'un de mes [projets Open Source](https://github.com/nmasse-itix?tab=repositories) ou l'une de mes contributions, vous pouvez ouvrir un ticket dans l'entrepot GitHub concerné et mentionnez [@nmasse-itix](https://github.com/nmasse-itix/). + +Remarque: je ne m'engage généralement pas sur un temps de réponse spécifique ni sur aucune réponse du tout à moins que votre e-mail ne soit clair, droit au but et ait quelque chose à voir avec mes centres d'intérêt. diff --git a/content/french/opensource/_index.md b/content/french/opensource/_index.md new file mode 100644 index 0000000..c7314f2 --- /dev/null +++ b/content/french/opensource/_index.md @@ -0,0 +1,6 @@ +--- +title: "Open Source" +--- + +J'utilise dans mon travail au quotidien de nombreuses communautés Open Source, sur lesquelles j'ai été ammené à écrire des articles. +Chaque communauté Open Source ci-dessous est un lien vers la liste des articles correspondants. diff --git a/content/french/speaking/_index.md b/content/french/speaking/_index.md new file mode 100644 index 0000000..39ed961 --- /dev/null +++ b/content/french/speaking/_index.md @@ -0,0 +1,6 @@ +--- +title: "Conférences" +--- + +Je suis occasionnellement invité chez des clients ou sur des salons pour parler des APIs et de SSO. +J'ai compilé ci-dessous la liste de mes dernières interventions. diff --git a/content/french/topics/_index.md b/content/french/topics/_index.md new file mode 100644 index 0000000..9842dcf --- /dev/null +++ b/content/french/topics/_index.md @@ -0,0 +1,6 @@ +--- +title: "Expertise" +--- + +Au cours de mes différentes prestations, je suis amené à travailler sur des sujets variés pour lesquels j'ai écrit un ou plusieurs articles. +Chaque sujet est un lien vers la liste des articles correspondants. diff --git a/content/french/writing/_index.md b/content/french/writing/_index.md new file mode 100644 index 0000000..0d7791f --- /dev/null +++ b/content/french/writing/_index.md @@ -0,0 +1,7 @@ +--- +title: "Publications" +date: 2019-11-07T00:00:00+02:00 +draft: false +--- + +Je publie des articles de temps à autre sur divers sites web en tant qu'invité. J'ai compilé ci-dessous une liste de mes récentes publications. diff --git a/content/speaking/_index.md b/content/speaking/_index.md deleted file mode 100644 index 61beb20..0000000 --- a/content/speaking/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Speaking" -date: 2017-02-20T00:00:00+02:00 -draft: false ---- - -Here is a list of my recent talks. \ No newline at end of file diff --git a/content/speaking/devoteam-tech-for-people-2018.md b/content/speaking/devoteam-tech-for-people-2018.md deleted file mode 100644 index c8caf5b..0000000 --- a/content/speaking/devoteam-tech-for-people-2018.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Devoteam #TechForPeople 2018" -date: 2018-10-10T00:00:00+02:00 -draft: false ---- - -The 10th Septembre 2018, I co-presented a session named _"No API, No Future"_ -in which I exhibited the Red Hat's API Lifecycle Automation. The event -`#TechForPeople` was organized by Devoteam. - -![Devoteam #TechForPeople](/speaking/2018-10-10-Devoteam-TechForPeople-1.jpg) -![Devoteam #TechForPeople](/speaking/2018-10-10-Devoteam-TechForPeople-2.jpg) -![Devoteam #TechForPeople](/speaking/2018-10-10-Devoteam-TechForPeople-3.jpg) -![Devoteam #TechForPeople](/speaking/2018-10-10-Devoteam-TechForPeople-4.jpg) diff --git a/content/writing/_index.md b/content/writing/_index.md deleted file mode 100644 index c1b1f07..0000000 --- a/content/writing/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Writing" -date: 2019-11-07T00:00:00+02:00 -draft: false ---- - -Here is a list of my recent articles. diff --git a/hugo b/hugo new file mode 100755 index 0000000..5a127ea --- /dev/null +++ b/hugo @@ -0,0 +1,37 @@ +#!/bin/sh + +set -Eeuo pipefail +trap cleanup SIGINT SIGTERM ERR EXIT + +function cleanup() { + trap - SIGINT SIGTERM ERR EXIT + + # On exit, remove any symbolic link in content/french that points + # to content/english + find content/french -type l -print0 | while IFS= read -r -d $'\0' filename; do + if realpath "$filename" | grep -E "^$PWD/" > /dev/null; then + rm -f "$filename" + fi + done +} + +# First, try to find page bundles. In that case, link the directory +(cd content/english && find * -type f -name 'index.md') | while read file; do + if [ ! -e "content/french/$file" ]; then + d="$(dirname $file)" + ln -s ../../../content/english/$d content/french/$d + fi +done + +# Then, find the regular pages and link the files directly. +(cd content/english && find * -type f -name '*.md') | while read file; do + if [ ! -e "content/french/$file" ]; then + ln -s ../../../content/english/$file content/french/$file + fi +done + +# Remove dangling links +find content/french -xtype l -exec rm -f {} \; + +hugo gen chromastyles --style=borland > static/css/chroma.css +hugo "$@" diff --git a/layouts/shortcodes/attachedFigure.html b/layouts/shortcodes/attachedFigure.html new file mode 100644 index 0000000..8cc3f04 --- /dev/null +++ b/layouts/shortcodes/attachedFigure.html @@ -0,0 +1,11 @@ + +{{- $filename := .Get "src" -}} +{{- $image := .Page.Resources.GetMatch (printf "%s" $filename) -}} +
+ + {{- with .Get "title" }} +
+ {{- . -}} +
+ {{- end }} +
\ No newline at end of file diff --git a/layouts/shortcodes/attachedFileLink.html b/layouts/shortcodes/attachedFileLink.html new file mode 100644 index 0000000..7d90ae4 --- /dev/null +++ b/layouts/shortcodes/attachedFileLink.html @@ -0,0 +1,4 @@ + +{{- $filename := .Get "src" -}} +{{- $file := .Page.Resources.GetMatch (printf "%s" $filename) -}} +{{- $file.Permalink -}} \ No newline at end of file diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html new file mode 100644 index 0000000..8c2ea6d --- /dev/null +++ b/layouts/shortcodes/figure.html @@ -0,0 +1,10 @@ + +{{ $url := .Get "src" }} +
+ + {{ with .Get "title" }} +
+ {{ . }} +
+ {{ end }} +
\ No newline at end of file diff --git a/netlify.toml b/netlify.toml index 71e366e..e8bc6a4 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,6 +1,6 @@ [build] publish = "public" -command = "hugo gen chromastyles --style=perldoc > static/css/chroma.css && hugo" +command = "./hugo --baseURL https://www.itix.fr" [build.environment] # Global HUGO_VERSION = "0.42" @@ -9,7 +9,7 @@ HUGO_VERSION = "0.42" HUGO_VERSION = "0.42" [context.deploy-preview] -command = "hugo gen chromastyles --style=perldoc > static/css/chroma.css && hugo --buildDrafts --buildFuture --baseURL $DEPLOY_PRIME_URL" +command = "./hugo --buildDrafts --buildFuture --baseURL $DEPLOY_PRIME_URL" [context.deploy-preview.environment] HUGO_ENABLEGITINFO = "true" diff --git a/static/google194fb24cd268043f.html b/static/google194fb24cd268043f.html deleted file mode 100644 index d17eeba..0000000 --- a/static/google194fb24cd268043f.html +++ /dev/null @@ -1 +0,0 @@ -google-site-verification: google194fb24cd268043f.html \ No newline at end of file diff --git a/static/images/qrcode.png b/static/images/qrcode.png deleted file mode 100644 index f280617..0000000 Binary files a/static/images/qrcode.png and /dev/null differ diff --git a/themes/cocoa b/themes/cocoa deleted file mode 160000 index 119b88c..0000000 --- a/themes/cocoa +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 119b88c0f33b5cf23ad894df02ca70a67e39cebc diff --git a/themes/diary b/themes/diary deleted file mode 160000 index f612ddd..0000000 --- a/themes/diary +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f612ddd985c218bf056db32412477acf65f63d6b diff --git a/themes/itix b/themes/itix new file mode 160000 index 0000000..d16133d --- /dev/null +++ b/themes/itix @@ -0,0 +1 @@ +Subproject commit d16133dbc5c4b584f71d249f98f76889c1b9e0c5