caco 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +10 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +12 -0
  6. data/Gemfile.lock +227 -0
  7. data/Guardfile +42 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +97 -0
  10. data/Rakefile +10 -0
  11. data/bin/_guard-core +29 -0
  12. data/bin/bundle +114 -0
  13. data/bin/byebug +29 -0
  14. data/bin/caco +29 -0
  15. data/bin/coderay +29 -0
  16. data/bin/console +20 -0
  17. data/bin/eyaml +29 -0
  18. data/bin/guard +29 -0
  19. data/bin/listen +29 -0
  20. data/bin/pry +29 -0
  21. data/bin/rake +29 -0
  22. data/bin/safe_yaml +29 -0
  23. data/bin/setup +8 -0
  24. data/bin/thor +29 -0
  25. data/bin/tilt +29 -0
  26. data/caco.gemspec +43 -0
  27. data/exe/caco +27 -0
  28. data/lib/caco.rb +115 -0
  29. data/lib/caco/barman.rb +10 -0
  30. data/lib/caco/barman/cell/global.rb +4 -0
  31. data/lib/caco/barman/cell/node.rb +15 -0
  32. data/lib/caco/barman/install.rb +25 -0
  33. data/lib/caco/barman/view/global.erb +7 -0
  34. data/lib/caco/barman/view/node.erb +8 -0
  35. data/lib/caco/cell.rb +8 -0
  36. data/lib/caco/config.rb +23 -0
  37. data/lib/caco/debian.rb +28 -0
  38. data/lib/caco/debian/add_user.rb +18 -0
  39. data/lib/caco/debian/apt_key_install.rb +19 -0
  40. data/lib/caco/debian/apt_repo_add.rb +17 -0
  41. data/lib/caco/debian/apt_sources_list.rb +15 -0
  42. data/lib/caco/debian/apt_update.rb +33 -0
  43. data/lib/caco/debian/cell/service.rb +19 -0
  44. data/lib/caco/debian/cell/sources_list.rb +7 -0
  45. data/lib/caco/debian/package_install.rb +21 -0
  46. data/lib/caco/debian/package_installed.rb +17 -0
  47. data/lib/caco/debian/service_enable.rb +26 -0
  48. data/lib/caco/debian/service_install.rb +31 -0
  49. data/lib/caco/debian/user_home.rb +17 -0
  50. data/lib/caco/debian/view/service.erb +18 -0
  51. data/lib/caco/debian/view/sources_list.erb +10 -0
  52. data/lib/caco/downloader.rb +41 -0
  53. data/lib/caco/executer.rb +33 -0
  54. data/lib/caco/facter.rb +41 -0
  55. data/lib/caco/file_link.rb +36 -0
  56. data/lib/caco/file_reader.rb +24 -0
  57. data/lib/caco/file_writer.rb +57 -0
  58. data/lib/caco/finder.rb +13 -0
  59. data/lib/caco/grafana.rb +6 -0
  60. data/lib/caco/grafana/install.rb +26 -0
  61. data/lib/caco/haproxy.rb +12 -0
  62. data/lib/caco/haproxy/cell/conf_postgres.rb +4 -0
  63. data/lib/caco/haproxy/cell/conf_stats.rb +4 -0
  64. data/lib/caco/haproxy/conf_get.rb +15 -0
  65. data/lib/caco/haproxy/conf_set.rb +52 -0
  66. data/lib/caco/haproxy/install.rb +9 -0
  67. data/lib/caco/haproxy/view/conf_postgres.erb +25 -0
  68. data/lib/caco/haproxy/view/conf_stats.erb +6 -0
  69. data/lib/caco/macro.rb +2 -0
  70. data/lib/caco/postgres.rb +44 -0
  71. data/lib/caco/postgres/build_augeas.rb +20 -0
  72. data/lib/caco/postgres/conf_get.rb +37 -0
  73. data/lib/caco/postgres/conf_set.rb +54 -0
  74. data/lib/caco/postgres/database_create.rb +28 -0
  75. data/lib/caco/postgres/extension_create.rb +28 -0
  76. data/lib/caco/postgres/hba_set.rb +65 -0
  77. data/lib/caco/postgres/install.rb +34 -0
  78. data/lib/caco/postgres/shell.rb +13 -0
  79. data/lib/caco/postgres/sql.rb +17 -0
  80. data/lib/caco/postgres/user_change_password.rb +13 -0
  81. data/lib/caco/postgres/user_create.rb +33 -0
  82. data/lib/caco/prometheus.rb +15 -0
  83. data/lib/caco/prometheus/adapter_install_pg.rb +107 -0
  84. data/lib/caco/prometheus/adapter_install_postgresql.rb +47 -0
  85. data/lib/caco/prometheus/cell/alertmanager_conf.rb +4 -0
  86. data/lib/caco/prometheus/cell/alerts.rb +4 -0
  87. data/lib/caco/prometheus/cell/conf.rb +7 -0
  88. data/lib/caco/prometheus/exporter_install.rb +35 -0
  89. data/lib/caco/prometheus/install.rb +50 -0
  90. data/lib/caco/prometheus/install_alert_manager.rb +62 -0
  91. data/lib/caco/prometheus/view/alertmanager_conf.erb +13 -0
  92. data/lib/caco/prometheus/view/alerts.erb +18 -0
  93. data/lib/caco/prometheus/view/conf.erb +34 -0
  94. data/lib/caco/rbenv.rb +8 -0
  95. data/lib/caco/rbenv/cell/profile.rb +4 -0
  96. data/lib/caco/rbenv/install.rb +56 -0
  97. data/lib/caco/rbenv/install_version.rb +17 -0
  98. data/lib/caco/rbenv/view/profile.erb +3 -0
  99. data/lib/caco/repmgr.rb +15 -0
  100. data/lib/caco/repmgr/cell/conf.rb +43 -0
  101. data/lib/caco/repmgr/conf.rb +25 -0
  102. data/lib/caco/repmgr/install.rb +25 -0
  103. data/lib/caco/repmgr/node_register_primary.rb +34 -0
  104. data/lib/caco/repmgr/node_register_standby.rb +25 -0
  105. data/lib/caco/repmgr/node_registered.rb +15 -0
  106. data/lib/caco/repmgr/node_role.rb +18 -0
  107. data/lib/caco/repmgr/view/conf.erb +27 -0
  108. data/lib/caco/settings_loader.rb +67 -0
  109. data/lib/caco/settings_loader_monkeypatch.rb +28 -0
  110. data/lib/caco/ssh.rb +6 -0
  111. data/lib/caco/ssh/authorized_keys_add.rb +82 -0
  112. data/lib/caco/sudo.rb +6 -0
  113. data/lib/caco/sudo/sudoers_add.rb +15 -0
  114. data/lib/caco/timescale.rb +6 -0
  115. data/lib/caco/timescale/install.rb +25 -0
  116. data/lib/caco/unpacker.rb +76 -0
  117. data/lib/caco/version.rb +3 -0
  118. metadata +398 -0
@@ -0,0 +1,34 @@
1
+ module Caco::Postgres
2
+ class Install < Trailblazer::Operation
3
+ class Repo < Trailblazer::Operation
4
+ step Subprocess(Caco::Debian::AptKeyInstall),
5
+ input: ->(_ctx, **) {{
6
+ url: 'https://www.postgresql.org/media/keys/ACCC4CF8.asc',
7
+ fingerprint: 'B97B 0AFC AA1A 47F0 44F2 44A0 7FCC 7D46 ACCC 4CF8'
8
+ }}
9
+ step Subprocess(Caco::Debian::AptRepoAdd),
10
+ input: ->(_ctx, **) {{
11
+ name: 'pgdg',
12
+ url: 'http://apt.postgresql.org/pub/repos/apt/',
13
+ release: "#{Caco::Facter.("os", "distro", "codename")}-pgdg",
14
+ component: 'main'
15
+ }}
16
+ end
17
+
18
+ step Subprocess(Repo)
19
+ step Subprocess(Caco::Debian::AptUpdate)
20
+ step Subprocess(Caco::Debian::PackageInstall),
21
+ input: ->(_ctx, **) {{
22
+ package: 'postgresql-server-12'
23
+ }},
24
+ id: :install_server
25
+
26
+ pass ->(ctx, **){ ctx.to_hash.dig(:install_dev_package) }, Output(:success) => Id(:install_dev_package)
27
+ step Subprocess(Class.new(Caco::Debian::PackageInstall)),
28
+ input: ->(_ctx, **) {{
29
+ package: 'postgresql-server-dev-12'
30
+ }},
31
+ id: :install_dev_package,
32
+ magnetic_to: nil
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ module Caco::Postgres
2
+ class Shell < Trailblazer::Operation
3
+ step ->(ctx, command:, **) {
4
+ ctx[:shell_command] = "su -c \"#{command}\" postgres"
5
+ },
6
+ id: :build_command
7
+
8
+ step Subprocess(Caco::Executer),
9
+ input: { shell_command: :command },
10
+ output: [:exit_code, :output],
11
+ id: "shell"
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ module Caco::Postgres
2
+ class Sql < Trailblazer::Operation
3
+ step :build_command
4
+ step Subprocess(Caco::Executer),
5
+ input: { sql_command: :command },
6
+ output: [:exit_code, :output, :stderr],
7
+ id: "shell"
8
+
9
+ def build_command(ctx, sql:, **)
10
+ ctx[:sql_command] = "su -l -c \"psql -e -U postgres -d postgres <<EOF
11
+ #{sql}
12
+ EOF
13
+ \" postgres"
14
+ # ctx[:sql_command] = "psql -U fernandes -d postgres -c \"#{sql}\""
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module Caco::Postgres
2
+ class UserChangePassword < Trailblazer::Operation
3
+ step ->(ctx, user:, password:, **) {
4
+ ctx[:sql] = "alter user #{user} with password '#{password}';"
5
+ },
6
+ id: :build_sql
7
+
8
+ step Subprocess(Caco::Postgres::Sql),
9
+ input: ->(_ctx, sql:, **) {{
10
+ sql: sql,
11
+ }}
12
+ end
13
+ end
@@ -0,0 +1,33 @@
1
+ module Caco::Postgres
2
+ class UserCreate < Trailblazer::Operation
3
+ step Subprocess(Caco::Postgres::Sql),
4
+ input: ->(_ctx, user:, **) {{
5
+ sql: "select usename from pg_user where usename='#{user}';",
6
+ }},
7
+ id: :sql_find_user
8
+
9
+ step ->(_ctx, output:, user:, **) {
10
+ output.match?(/^\s#{user}$/)
11
+ },
12
+ Output(:success) => End(:success),
13
+ Output(:failure) => Track(:success),
14
+ id: :verify_user_exists
15
+
16
+ step Subprocess(Caco::Executer),
17
+ input: ->(ctx, user:, **) {{
18
+ command: "createuser -e #{user} #{ctx[:additional_args]}",
19
+ }},
20
+ id: :create_user
21
+
22
+ step Subprocess(Caco::Postgres::UserChangePassword),
23
+ input: ->(ctx, user:, password:, **) {{
24
+ user: user, password: password,
25
+ }},
26
+ id: :user_change_password
27
+
28
+ step ->(ctx, **) {
29
+ ctx[:created] = ctx[:changed] = true
30
+ },
31
+ id: :mark_created
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ module Caco
2
+ module Prometheus
3
+ end
4
+ end
5
+
6
+ require 'caco/prometheus/adapter_install_pg'
7
+ require 'caco/prometheus/adapter_install_postgresql'
8
+ require 'caco/prometheus/exporter_install'
9
+ require 'caco/prometheus/install'
10
+ require 'caco/prometheus/install_alert_manager'
11
+
12
+ # Templates
13
+ require 'caco/prometheus/cell/alertmanager_conf'
14
+ require 'caco/prometheus/cell/alerts'
15
+ require 'caco/prometheus/cell/conf'
@@ -0,0 +1,107 @@
1
+ class Caco::Prometheus::AdapterInstallPg < Trailblazer::Operation
2
+ step Subprocess(Class.new(Caco::Debian::PackageInstall)),
3
+ input: ->(_ctx, postgresql_version:, **) {{
4
+ package: "postgresql-server-dev-#{postgresql_version}"
5
+ }},
6
+ id: :install_postgresql_server_dev
7
+
8
+ step Subprocess(Class.new(Caco::Debian::PackageInstall)),
9
+ input: ->(_ctx, postgresql_version:, **) {{
10
+ package: "libpq-dev"
11
+ }},
12
+ id: :install_libpq_dev
13
+
14
+ step :check_root
15
+ def check_root(ctx, **)
16
+ ctx[:root] = Settings.prometheus.root
17
+ FileUtils.mkdir_p(Settings.prometheus.root)
18
+ end
19
+
20
+ step :build_url
21
+ def build_url(ctx, version:, root:, **)
22
+ ctx[:url] = "https://github.com/timescale/pg_prometheus/archive/#{version}.tar.gz"
23
+ ctx[:dest] = "#{root}/pg_prometheus-#{version}.tar.gz"
24
+ ctx[:current_target] = "#{root}/pg_prometheus-#{version}"
25
+ ctx[:current_link] = "#{root}/pg_prometheus-current"
26
+ end
27
+
28
+ step Subprocess(Caco::Downloader),
29
+ input: ->(ctx, url:, dest:, **) {{
30
+ url: url,
31
+ dest: dest,
32
+ stubbed_file: ctx[:stubbed_file]
33
+ }}
34
+ step Subprocess(Caco::Unpacker),
35
+ input: ->(ctx, root:, dest:, **) {{
36
+ pack: dest,
37
+ dest: root
38
+ }}
39
+ step Subprocess(Caco::FileLink),
40
+ input: ->(ctx, current_target:, current_link:, **) {{
41
+ target: current_target,
42
+ link: current_link
43
+ }}
44
+
45
+ # Build
46
+ step Subprocess(Class.new(Caco::Executer)),
47
+ input: ->(_ctx, current_link:, **) {{
48
+ command: "test -f #{current_link}/.caco_built"
49
+ }},
50
+ id: :check_caco_built,
51
+ Output(:failure) => Track(:build_pg)
52
+
53
+ step Subprocess(Class.new(Caco::Executer)),
54
+ input: ->(_ctx, current_link:, **) {{
55
+ command: "cd #{current_link} && make"
56
+ }},
57
+ id: :build_pg,
58
+ magnetic_to: :build_pg,
59
+ Output(:success) => Track(:build_pg)
60
+
61
+ step Subprocess(Class.new(Caco::Executer)),
62
+ input: ->(_ctx, current_link:, **) {{
63
+ command: "touch #{current_link}/.caco_built"
64
+ }},
65
+ id: :mark_as_built,
66
+ magnetic_to: :build_pg
67
+
68
+ # Install
69
+ step Subprocess(Class.new(Caco::Executer)),
70
+ input: ->(_ctx, current_link:, **) {{
71
+ command: "test -f #{current_link}/.caco_installed"
72
+ }},
73
+ id: :check_caco_installed,
74
+ Output(:failure) => Track(:install_pg)
75
+
76
+ step Subprocess(Class.new(Caco::Executer)),
77
+ input: ->(_ctx, current_link:, **) {{
78
+ command: "cd #{current_link} && make install"
79
+ }},
80
+ id: :install_pg,
81
+ magnetic_to: :install_pg,
82
+ Output(:success) => Track(:install_pg)
83
+
84
+ step Subprocess(Class.new(Caco::Executer)),
85
+ input: ->(_ctx, current_link:, **) {{
86
+ command: "touch #{current_link}/.caco_installed"
87
+ }},
88
+ id: :mark_as_installed,
89
+ magnetic_to: :install_pg,
90
+ Output(:success) => Track(:install_pg)
91
+
92
+ step :postgresql_shared_library,
93
+ magnetic_to: :install_pg,
94
+ Output(:success) => Track(:install_pg)
95
+
96
+ step :postgresql_should_restart,
97
+ magnetic_to: :install_pg
98
+
99
+ def postgresql_shared_library(ctx, **)
100
+ Caco::Postgres.add_shared_library("timescaledb")
101
+ Caco::Postgres.add_shared_library("pg_prometheus")
102
+ end
103
+
104
+ def postgresql_should_restart(ctx, **)
105
+ Caco::Postgres.should_restart!
106
+ end
107
+ end
@@ -0,0 +1,47 @@
1
+ class Caco::Prometheus::AdapterInstallPostgresql < Trailblazer::Operation
2
+ step :check_root
3
+ step :build_url
4
+ step :mkdir_target
5
+
6
+ step Subprocess(Caco::Downloader),
7
+ input: ->(ctx, url:, dest:, **) {{
8
+ url: url,
9
+ dest: dest,
10
+ stubbed_file: ctx[:stubbed_file]
11
+ }}
12
+
13
+ step Subprocess(Caco::Unpacker),
14
+ input: ->(ctx, adapter_root:, dest:, **) {{
15
+ pack: dest,
16
+ dest: adapter_root
17
+ }}
18
+
19
+ step Subprocess(Caco::FileLink),
20
+ input: ->(ctx, current_target:, current_link:, **) {{
21
+ target: current_target,
22
+ link: current_link
23
+ }}
24
+
25
+ step Subprocess(Caco::Debian::ServiceInstall),
26
+ input: ->(ctx, current_link:, database:, host:, username:, password:, **) {{
27
+ name: "prometheus-adapter-postgresql",
28
+ command: "#{current_link}/prometheus-postgresql-adapter -pg-database #{database} -pg-host #{host} -pg-user #{username} -pg-password #{password} -log-level warn"
29
+ }}
30
+
31
+ def check_root(ctx, version:, **)
32
+ ctx[:root] = Settings.prometheus.root
33
+ ctx[:adapter_root] = "#{Settings.prometheus.root}/postgresql-adapter-#{version}.linux-amd64"
34
+ FileUtils.mkdir_p(ctx[:adapter_root])
35
+ end
36
+
37
+ def build_url(ctx, version:, root:, adapter_root:, **)
38
+ ctx[:url] = "https://github.com/timescale/prometheus-postgresql-adapter/releases/download/v#{version}/prometheus-postgresql-adapter-#{version}-linux-amd64.tar.gz"
39
+ ctx[:dest] = "#{root}/prometheus-postgresql-adapter-#{version}-linux-amd64.tar.gz"
40
+ ctx[:current_target] = adapter_root
41
+ ctx[:current_link] = "#{root}/postgresql-adapter-current"
42
+ end
43
+
44
+ def mkdir_target(ctx, current_target:, **)
45
+ FileUtils.mkdir_p(current_target)
46
+ end
47
+ end
@@ -0,0 +1,4 @@
1
+ module Caco::Prometheus::Cell
2
+ class AlertmanagerConf < Trailblazer::Cell
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Caco::Prometheus::Cell
2
+ class Alerts < Trailblazer::Cell
3
+ end
4
+ end
@@ -0,0 +1,7 @@
1
+ module Caco::Prometheus::Cell
2
+ class Conf < Trailblazer::Cell
3
+ def root
4
+ property(:root)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ class Caco::Prometheus::ExporterInstall < Trailblazer::Operation
2
+ step :check_root
3
+
4
+ step Subprocess(Caco::Downloader),
5
+ input: ->(ctx, url:, tar_dest_path:, **) {{
6
+ url: url,
7
+ dest: tar_dest_path,
8
+ stubbed_file: ctx[:stubbed_file]
9
+ }}
10
+
11
+ step Subprocess(Caco::Unpacker),
12
+ input: ->(ctx, tar_dest_path:, tar_unpack_path:, **) {{
13
+ pack: tar_dest_path,
14
+ dest: tar_unpack_path
15
+ }}
16
+
17
+ step Subprocess(Caco::FileLink),
18
+ input: ->(ctx, current_target:, current_link:, **) {{
19
+ target: current_target,
20
+ link: current_link
21
+ }}
22
+
23
+ step Subprocess(Caco::Debian::ServiceInstall),
24
+ input: ->(ctx, service_name:, service_command:, environment_vars: nil, environment_file: nil, **) {{
25
+ name: service_name,
26
+ command: service_command,
27
+ environment_vars: environment_vars,
28
+ environment_file: environment_file
29
+ }}
30
+
31
+ def check_root(ctx, **)
32
+ ctx[:root] = Settings.prometheus.root
33
+ FileUtils.mkdir_p(Settings.prometheus.root)
34
+ end
35
+ end
@@ -0,0 +1,50 @@
1
+ class Caco::Prometheus::Install < Trailblazer::Operation
2
+ step :check_root
3
+ def check_root(ctx, **)
4
+ ctx[:root] = Settings.prometheus.root
5
+ FileUtils.mkdir_p(Settings.prometheus.root)
6
+ end
7
+
8
+ step :build_url
9
+ def build_url(ctx, version:, root:, **)
10
+ ctx[:url] = "https://github.com/prometheus/prometheus/releases/download/v#{version}/prometheus-#{version}.linux-amd64.tar.gz"
11
+ ctx[:dest] = "#{root}/prometheus-#{version}.linux-amd64.tar.gz"
12
+ ctx[:current_target] = "#{root}/prometheus-#{version}.linux-amd64"
13
+ ctx[:current_link] = "#{root}/prometheus-current"
14
+ ctx[:config_file_path] = "#{Settings.prometheus.config_root}/prometheus.yml"
15
+ end
16
+
17
+ step Subprocess(Caco::Downloader),
18
+ input: ->(ctx, url:, dest:, **) {{
19
+ url: url,
20
+ dest: dest,
21
+ stubbed_file: ctx[:stubbed_file]
22
+ }}
23
+
24
+ step Subprocess(Caco::Unpacker),
25
+ input: ->(ctx, root:, dest:, **) {{
26
+ pack: dest,
27
+ dest: root
28
+ }}
29
+
30
+ step Subprocess(Caco::FileLink),
31
+ input: ->(ctx, current_target:, current_link:, **) {{
32
+ target: current_target,
33
+ link: current_link
34
+ }}
35
+
36
+ step Subprocess(Caco::Debian::ServiceInstall),
37
+ input: ->(ctx, current_link:, **) {{
38
+ name: "prometheus",
39
+ command: "#{current_link}/prometheus --config.file=#{Settings.prometheus.config_root}/prometheus.yml --storage.tsdb.path=#{Settings.prometheus.root}/data"
40
+ }}
41
+
42
+ step ->(ctx, **) {
43
+ ctx[:content] = Caco::Prometheus::Cell::Conf.({root: Settings.prometheus.config_root}).to_s
44
+ },
45
+ id: :generate_template!
46
+
47
+ step Subprocess(Caco::FileWriter),
48
+ input: { content: :content, config_file_path: :path },
49
+ output: { file_changed: :sources_updated }
50
+ end
@@ -0,0 +1,62 @@
1
+ class Caco::Prometheus::InstallAlertManager < Trailblazer::Operation
2
+ step :check_root
3
+ def check_root(ctx, **)
4
+ ctx[:root] = Settings.prometheus.root
5
+ FileUtils.mkdir_p(Settings.prometheus.root)
6
+ end
7
+
8
+ step :build_url
9
+ def build_url(ctx, version:, root:, **)
10
+ ctx[:url] = "https://github.com/prometheus/alertmanager/releases/download/v#{version}/alertmanager-#{version}.linux-amd64.tar.gz"
11
+ ctx[:dest] = "#{root}/alertmanager-#{version}.linux-amd64.tar.gz"
12
+ ctx[:current_target] = "#{root}/alertmanager-#{version}.linux-amd64"
13
+ ctx[:current_link] = "#{root}/alertmanager-current"
14
+ ctx[:config_file_path] = "#{Settings.prometheus.config_root}/alertmanager.yml"
15
+ ctx[:alerts_file_path] = "#{Settings.prometheus.config_root}/alerts.d/alerts.rules"
16
+ end
17
+
18
+ step Subprocess(Caco::Downloader),
19
+ input: ->(ctx, url:, dest:, **) {{
20
+ url: url,
21
+ dest: dest,
22
+ stubbed_file: ctx[:stubbed_file]
23
+ }}
24
+
25
+ step Subprocess(Caco::Unpacker),
26
+ input: ->(ctx, root:, dest:, **) {{
27
+ pack: dest,
28
+ dest: root
29
+ }}
30
+
31
+ step Subprocess(Caco::FileLink),
32
+ input: ->(ctx, current_target:, current_link:, **) {{
33
+ target: current_target,
34
+ link: current_link
35
+ }}
36
+
37
+ step Subprocess(Caco::Debian::ServiceInstall),
38
+ input: ->(ctx, current_link:, **) {{
39
+ name: "prometheus-alertmanager",
40
+ command: "#{current_link}/alertmanager --config.file=#{Settings.prometheus.config_root}/alertmanager.yml"
41
+ }}
42
+
43
+ step ->(ctx, **) {
44
+ ctx[:content] = Caco::Prometheus::Cell::Conf.({root: Settings.prometheus.config_root}).to_s
45
+ },
46
+ id: :generate_template!
47
+
48
+ step Subprocess(Caco::FileWriter),
49
+ input: { content: :content, config_file_path: :path },
50
+ output: { file_changed: :sources_updated },
51
+ id: :write_config_template
52
+
53
+ step ->(ctx, **) {
54
+ ctx[:alerts_content] = Caco::Prometheus::Cell::Alerts.().to_s
55
+ },
56
+ id: :generate_alerts_template!
57
+
58
+ step Subprocess(Class.new(Caco::FileWriter)),
59
+ input: { alerts_file_path: :path, alerts_content: :content },
60
+ output: { file_changed: :sources_updated },
61
+ id: :write_alerts_template
62
+ end