Ansible の shell のヒアドキュメントについて

投稿者: Anonymous 以下のような ansible のレシピを書いたのですが ansible-playbook を実行すると SyntaxError になって失敗します (シェルの中身は AWS inspector の推奨対応をコピーしたもので bash に貼り付けると実行できます) shell: | for user in `awk -F: ‘($3 < 1000) {print $1 }’ /etc/passwd` ; do if [ $user != “”root”” ]; then usermod -L $user if [ $user != “”sync”” ] && [ $user != “”shutdown”” ] && […(Continue Reading)

ansibleでroleから抜ける方法はありますか?

投稿者: Anonymous 現在Ansibleであるソフトをインストールするroleを書いているのですが、もしインストールされていれば後続のロールの処理をスキップする、というような処理を書きたいです。 これは私の知る方法では、まずインストールされているかどうかをチェックしてその結果を変数に入れる。その後、後続の処理全てにwhenを書けばできなくはないと思います。 しかしこの方法は後続の処理全てにwhenを書かなければいけないため、もっと良い方法がないか悩んでいます。 全てにwhenを書いた場合の例を書くと、 – name: Is hoge Installed? shell: type hoge failed_when: false changed_when: result.rc not in [0] register: result – name: a when: result.changed – name: b when: result.changed – name: c when: result.changed … このような感じになってしまいます。 他に良い方法はないでしょうか? ご回答お待ちしております。 解決 「roleから抜ける」とはrole内でのmain.yml内の記述の中で完結する場合という認識で合ってますか? であれば、「block」でまとめればwhenを1回書くだけで済みます。 – name: Is hoge Installed? shell: type hoge register: result…(Continue Reading)

Ansible で、 ssh に利用している IP アドレスを変数として利用したい

投稿者: Anonymous Ansible で記述を行っていく中で、例えば自身の IP アドレスをサーバー設定ファイルに記述したくなったとします。これはどうやったら実現できるでしょうか。 特に、 ssh に利用したホスト(のIP)を ansible は知ることができるはずなので、それを変数として利用する方法がないかどうか知りたいと思っています。 解決 Variables — Ansible Documentation こちらに書いてますが {{ foo }} という書式で変数にアクセスできます。 IPアドレスを表す変数は FAQ によると ansible -m setup hostname で調べることが出来ます。 試しに実行してみましたら次のように表示されました。 $ ansible -m setup localhost localhost | SUCCESS => { “ansible_facts”: { (略) “ansible_eth0”: { “active”: true, “device”: “eth0”, “ipv4”: { “address”: “10.0.2.15”, “broadcast”: “10.0.2.255”,…(Continue Reading)

Ansibleのyumモジュールでwith_itemsパラメータを使用する方法について

投稿者: Anonymous Vagrantからansible_localプロビジョナーで 下記のAnsibleスクリプトを動かしたところ – name: install yum: name: $item state: latest with_items: – gcc – make – git – openssl-devel – bzip2-devel – zlib-devel – readline-devel – sqlite-devel – patch 下記のようなエラーがでました。  fatal: [127.0.0.1]: FAILED! => { “changed”: false, “failed”: true, “msg”: “Unsupported parameters for (yum) module: with_items. Supported parameters include: conf_file,disable_gpg_check,disablerepo,enablerepo,exclude,install_repoquery,installroot,list,name,skip_broken,state,update_cache,validate_certs” } エラー文言をみるにyumモジュールではwith_itemsパラメータが使用できないとのことですが、 テックブログなどをみるに、どうやら動くと書いてあるところが多かったので動作すると思っているのですが、…(Continue Reading)

ansibleでreplaceの使用例の’1’と’2’はどういう意味でしょうか?

投稿者: Anonymous ansible公式サイトのreplaceモジュールの使用例の、 replaceキーの1や2は、どういう意味でしょうか? 使用例 # Before 2.3, option ‘dest’, ‘destfile’ or ‘name’ was used instead of ‘path’ – replace: path: /etc/hosts regexp: ‘(s+)old.host.name(s+.*)?$’ replace: ‘1new.host.name2’ backup: yes 公式サイトの使用例 http://docs.ansible.com/ansible/latest/replace_module.html#examples 解決 正規表現の後方参照と呼ばれるもので、regexp:キーの()で括られた部分の正規表現にマッチした値と順に置き換えられます。 regexp: ‘(s+)old.host.name(s+.*)?$’ 1つ目の()にマッチした値が1に、2つ目の()にマッチした値が2に、以下開きカッコ(が増えるたびにnの対応する数字も増えていきます。 回答者: Anonymous

playbook に対しての変数を定義できますか?

投稿者: Anonymous playbook の中で一通して利用したい変数があります。これを定義する方法はありますか? 近い変数は、 set_fact/register による fact 的な情報の登録なのですが、これは (playbook,host) 単位に対して管理されるため、 playbook の中ですべての play で共通して使う変数としては使いづらい と考えたので、質問しています。 解決 inventory の全てのノード(host)が all グループに属するので、group_vars/all.yml に書けば目的のことができると思います。 inventory に書くなら [web] 192.168.56.10 [db] 192.168.56.20 [all:vars] ntp_server=192.168.56.1 group_vars/all.yml に書くなら — ntp_server : 192.168.56.1 もしくは、コマンドラインで指定する。–extra-vars も playbook 全体(global)になります。 Variable Scopes http://docs.ansible.com/ansible/playbooks_variables.html#variable-scopes 回答者: Anonymous

Ansibleでgit clone時に作成されるファイルの権限を変更したい

投稿者: Anonymous Ansibleでgitモジュールを使用時にdestオプションでファイルを作成し、 git cloneを実行する時に、権限を変更することは可能でしょうか。 – name: git clone git: repo: http://git.com/gitbucket/example.git dest: /home/example/ owner: vagrant group: vagrant mode: 0755 version: master や – name: git clone git: repo: http://git.com/gitbucket/example.git dest: /home/example/ owner: vagrant group: vagrant mode: 0755 version: master を試しましたが、エラーになってしまいました。 書き方を統一したいので owner=vagrant のような書き方ではなく owner: vagrant と書きたいです。宜しくお願いします。 解決 本家に同じと思しき質問がありました。How to switch a user per task…(Continue Reading)

ansibleのyamlでplaybookを作成した際の、各モジュールの頭にハイフンを付ける基準について

投稿者: Anonymous 現在、ansibleでyamlを使って、playbookを記載しています。 サンプルをうまく使って、動かすことはできているのですが、yamlの書き方について以下の点を質問させてください。 ■質問事項1 たとえば以下のようなplaybookがある場合に、文頭に「-(ハイフン)」がつくものと付かないものがあります。 調べるとシーケンスという考え方らしいのですが、「ハイフン」をつけるときとつけないときをどのように決めればいいのかおしえていただけないでしょうか。 以下、サンプル。 「- name」となっていたり、「- size」となっているところが該当箇所になります。 – name: Create a virtual machine on given ESXi hostname vmware_guest: hostname: “{{ vcenter_ip }}” username: “{{ vcenter_username }}” password: “{{ vcenter_password }}” validate_certs: False folder: /DC1/vm/ name: test_vm_0001 state: poweredon guest_id: centos64Guest esxi_hostname: “{{ esxi_hostname }}” disk: – size_gb: 10 type: thin datastore:…(Continue Reading)

Ansibleのgitモジュールで指定したgitlabのリポジトリの記述が空になってしまう

投稿者: Anonymous ymlファイルにgitモジュールのgitコマンドを記入し 実行しようとしたところ playbookの実行時に指定した”repo=●●●” 「●●●」部分が空になっているようで、さらにタイムアウトもせずにplaybook実行が止まってしまいます。 – name: gitでリポジトリの取得 git: [email protected]:sample.git dest=/home/test version=origin accept_hostkey=yes playbook実行中のログを取得すると <192.168.0.1> REMOTE_MODULE git repo= dest=/home/test version=master accept_hostkey=yes となってしまいます。 試しにssh取得ではなくhttp取得に変えたところ repoが空になるという現象は発生しませんでした。 ①何かssh取得できない要因があるのでしょうか 言葉足らずであれば申し訳御座いません。 宜しくお願い致します。 環境は Linux version 3.10.0-327.10.1.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 Ansible 1.9.4-1.el7 です。 解決 解決しましたので、記載しておきます。 Ansibleのgithubで公開されていたコードを解析してみたところ repoの値を補完する処理を見つけまして解析しておりました。 また他の方にご教授いただきまして、スキームを足すとこの処理が うまく保管をしてくれるようですので 以下でうまくいくようです。 – name:…(Continue Reading)

AWS環境で複数のEC2にSSHせずに共通のレシピを実行するベストプラクティス

投稿者: Anonymous AWS EC2 インスタンスに共通のプロビジョニングレシピを作成して実行したいです ただ ssh ができるのは踏み台用のごく一部のサーバーで その他大多数のサーバーにはセキュリティの都合上 SSH 鍵自体が存在しません そのため SSH on SSM も利用することができないので SSM だけを使ってレシピを実行する方法はないでしょうか AWS の操作権限自体はリソース削除系以外作成や変更に関してはある程度何でもできる権限を持ってます itamae や ansible を試してみたのですがどちらも SSH 前提みたいで ansible に関しては単独レシピであれば ssm 経由で実行できるみたいなのですが OSで分岐するようなコードがかけません(設定ファイルの場所等を吸収できない) 参考:https://qiita.com/taishin/items/f3b0f3307a4eb2b394cb レシピをシェルスクリプト化してS3に置いて実行するというのも可能ですが 生のシェルスクリプトだと 可読性や運用性において itamae や ansible のようなプロビジョニングツールには劣りますし 参考:https://dev.classmethod.jp/cloud/aws/manage-instance-by-ec2-run-command-only/ itamae や ansible にひたすら aws cli run_command を書くのも可読性が悪くなってしまいます ansible や itamae に ssh の代わりに ssm…(Continue Reading)

Ansible で、すべてのノードで成功することを確認してから次のステップを実行したい

投稿者: Anonymous Ansible のタスクを記述していました。その中で、すべてのノードで成功することを確認してから次のステップを実行したいような、ステップがありました。この場合、どのノードであっても fail したならば、その全体のタスク自体を abort してほしいです。これは、 ansible の機能によって実現できますでしょうか。 何も考えずに普通にステップを記述していくと、失敗したノードはそこで実行が止まるが、そのほかのノードは継続して実行が進んでいくので、この質問をしています。 解決 any_error_fatalを指定すると、あるノードがタスクの実行に失敗した時に他のノードもそこで abort します。 回答者: Anonymous

Ansible で、ファイル名が入った変数の拡張子を省いて展開したい

投稿者: Anonymous Ansible で、変数にファイル名がバインドされているとします。その拡張子を省いて展開したいです。 以下の通り、 regex_replace を用いればできるではないか、と思っているのですが、うまくいっていないです。 どうやったら、やりたいことが実現できるでしょうか。 追記: 以下のプログラムは、本当にやりたいことである、「変数から拡張子を省いて展開」をどうにかしてできないかと試行するために作った playbook です。シェルの機能で回避したいわけではないです。。 test.yml — – name: test ansible hosts: localhost user: ubuntu vars: file_name: “hoge.txt” tasks: – name: Hello server shell: echo “{{ file_name | regex_replace(‘^(.*)\.[^\.]*$’,’\1′) }}” > test.txt 実行コマンド ansible-playbook test.yml 期待する動作 test.txt の中身が hoge になる。 実際の動作 test.txt の中身が hoge.txt になる 解決 @unarist さんのコメントに従い、…(Continue Reading)

vagrantのLinuxでminikubeを動かしたい

投稿者: Anonymous vagrantのLinuxにminikubeを動かしたいですが、エラーとなり止まっています。 dockerやkubanetesを勉強したいためです。 手順1. power-shellで、Cドライブ直下で以下のコマンドを実行 git clone https://github.com/takara9/vagrant-minikube 手順2. power-shellで、以下のコマンドを実行 cd vagrant-minikube 手順3. power-shellで、以下のコマンドを実行 vagrant up エラーメッセージ TASK [Add GlusterFS Repository] ************************************************ changed: [minikube] TASK [Install GlusterFS] ******************************************************* changed: [minikube] TASK [download] **************************************************************** changed: [minikube] TASK [download] **************************************************************** changed: [minikube] TASK [start Minikube temporary] ************************************************ fatal: [minikube]: FAILED! => {“changed”: true, “cmd”: [“/usr/local/bin/minikube”, “start”,…(Continue Reading)

playbook を、プロジェクトルート以外に配置するには?

投稿者: Anonymous 巨大なシステムのデプロイを Ansible で記述していると、多種多様な playbook を記述したくなります。各 playbook は、デフォルトではプロジェクトルートに配置される想定ですが、数が増えてくると、サブディレクトリを切って、そこに整理していくなどを行いたくなります。 質問: ansible の playbook は、プロジェクトルート以外に配置することはできますか? (プロジェクトルート以外配置にされた playbook を実行することはできますか?) 解決 可能だと思います。 ansible/ | ansible.cfg | +– hosts/ | | | +– production/ | | | inventory | | +– group_vars/ | | +– host_vars/ | | | +– staging/ | | inventory | +– group_vars/ | +–…(Continue Reading)

新規EC2インスタンスにSSM経由でAnsibleを実行する方法

投稿者: Anonymous ssh 経由で実行するサーバー初期構築用の Ansible のレシピがあって これまでローカルPCからssh経由で対象サーバーにレシピを実行していたんですが このレシピをなるべく改変せずに ssh のかわりに SSM を使って実行する方法はあるでしょうか セキュリティ要件のため管理はすべてSSM経由で行うことになり ローカルPCで ansible-playbook を実行するだけでは動きません 方法としては SSM でEC2に入ってからレシピを git clone でもってきて ローカルホストに対して ansible を実行する 初期環境なので python, git, ansible が入っていないので手動でインストールする必要があり再現性が担保できない aws cli には Run Command (https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/walkthrough-cli.html) というのがあってSSM 経由でコマンドを実行できるみたいなのですが ansible で ssh のかわりにこの Run Command を使用するというのはできないでしょうか python, git, ansible をインストールしてローカルに Ansible を実行する という1連のスクリプトを書いてそれを Run Command で呼べば可能ではあるのですが…(Continue Reading)

ansible inventory に、他の group の内容を指定したい

投稿者: Anonymous ansible の inventory の設定で、たまたま、同じ host を指定できる場合があったとします。 (すべてのサーバーを1筐体に入れたい場合など、よくこれが起こると思います。) その場合に、あるグループで指定したホストの内容を、そのまま他のグループに指定したい場合があります。 これを実現する方法はありますか? というのも、同じIPを別のグループに、ひたすらべた書きしていくと、後々取り回しが効きにくいと考えるからです。 解決 groups-of-groupsという機能があって、[groupname:children]で他のgroupのhostを加ることができます。 例としてinventoryは以下の様に [group1] host1 host2 [group2] host3 host4 [group3:children] group1 group2 ansible –list-hosts group3 は正しくhost1-4を表示します。 回答者: Anonymous

groups[‘hogehoge’] と書いてある ansible の変数はどこで設定される?

投稿者: Anonymous Ansible のソースコードを見ている中で、次のような記述を見かけました。 vars.yml (変数定義の yaml ファイル)の中での記述です。 SOME_VAR: “{{ groups[‘hogehoge’][0] }}” この groups 変数(のようなもの)はどのように定義されますか? 解決 これは、 inventory で定義される group を参照するための構文です。 例えば、 inventory の中で次のような記述があった場合、 上記の変数参照は 11.22.33.44 に置換されます。 [hogehoge] 11.22.33.44 11.22.33.45 回答者: Anonymous